結果
問題 |
No.961 Vibrant Fillumination
|
ユーザー |
![]() |
提出日時 | 2025-03-20 20:33:14 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,304 bytes |
コンパイル時間 | 315 ms |
コンパイル使用メモリ | 82,356 KB |
実行使用メモリ | 131,140 KB |
最終ジャッジ日時 | 2025-03-20 20:35:10 |
合計ジャッジ時間 | 36,890 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 1 WA * 1 |
other | AC * 4 WA * 44 |
ソースコード
import sys class FenwickTree: def __init__(self, size): self.n = size self.tree = [0] * (self.n + 2) # 1-based indexing def update_point(self, idx, val): idx += 1 # Convert 0-based to 1-based while idx <= self.n + 1: # Ensure we don't go out of bounds self.tree[idx] ^= val idx += idx & -idx def query_prefix(self, idx): idx += 1 # Convert 0-based to 1-based res = 0 while idx > 0: res ^= self.tree[idx] idx -= idx & -idx return res def range_xor(self, l, r, val): self.update_point(l, val) self.update_point(r + 1, val) def main(): input = sys.stdin.read().split() ptr = 0 N = int(input[ptr]) ptr += 1 h = list(map(int, input[ptr:ptr+N])) ptr += N events = [] max_y = 0 for _ in range(N): a = int(input[ptr]) b = int(input[ptr+1]) c = int(input[ptr+2]) d = int(input[ptr+3]) e = int(input[ptr+4]) ptr +=5 start_x = a end_x = c L = b R = d -1 # Start event (type 1) events.append( (start_x, 1, e, L, R) ) # End event (type 0) events.append( (end_x, 0, e, L, R) ) max_y = max(max_y, R) Q = int(input[ptr]) ptr +=1 queries = [] for q_idx in range(Q): p = int(input[ptr]) q = int(input[ptr+1]) ptr +=2 queries.append( (p, q, q_idx) ) max_y = max(max_y, q) # Merge events and queries for p, q, idx in queries: events.append( (p, 2, q, idx) ) # Sort the events events.sort(key=lambda x: (x[0], x[1])) # Initialize Fenwick Tree ft_size = max_y + 2 # To handle R+1 up to max_y +1 fenwick = FenwickTree(ft_size) # Process events ans = [0] * Q for event in events: x = event[0] typ = event[1] if typ == 0 or typ == 1: e_i, L, R = event[2], event[3], event[4] h_val = h[e_i - 1] fenwick.range_xor(L, R, h_val) else: q, idx = event[2], event[3] res = fenwick.query_prefix(q) ans[idx] = res # Output the answers in order for a in ans: print(a) if __name__ == '__main__': main()