結果
問題 |
No.789 範囲の合計
|
ユーザー |
![]() |
提出日時 | 2025-03-10 02:41:04 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 1,791 bytes |
コンパイル時間 | 439 ms |
コンパイル使用メモリ | 82,848 KB |
実行使用メモリ | 134,388 KB |
最終ジャッジ日時 | 2025-03-10 02:41:10 |
合計ジャッジ時間 | 5,588 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 11 MLE * 4 |
ソースコード
import gc class Compression: def __init__(self, iterable): self.n = len(iterable) self.v2i = {} for i, val in enumerate(sorted(iterable)): self.v2i[val] = i def __len__(self): return self.n def index(self, val): """val のインデックスを返す""" return self.v2i[val] class FenwickTree: def __init__(self, n): self.data = [0] * (n+10) self.n = (n+10) def add(self, p, x): assert 0 <= p < self.n p += 1 while p < len(self.data): self.data[p] += x p += p & -p def sum(self, p): """区間 [0, p] の和""" assert 0 <= p < self.n p += 1 s = 0 while p > 0: s += self.data[p] p -= p & -p return s def rangesum(self, l, r): """区間 [l, r] の和""" assert 0 <= l <= r < self.n s = self.sum(r) if l > 0: s -= self.sum(l-1) return s N = int(input()) queries = [] inds = set() for _ in range(N): qs = list(map(int, input().split())) if qs[0] == 0: # a[x] += y x, y = qs[1]-1, qs[2] queries.append((0, x, y)) inds.add(x) elif qs[0] == 1: # [l, r] l, r = qs[1]-1, qs[2]-1 queries.append((1, l, r)) inds.add(l) inds.add(r) comp = Compression(inds) del inds gc.collect() ft = FenwickTree(len(comp)+10) ans = 0 for i in range(N): if queries[i][0] == 0: x, y = queries[i][1], queries[i][2] p = comp.index(x) ft.add(p, y) elif queries[i][0] == 1: l, r = queries[i][1], queries[i][2] li = comp.index(l) ri = comp.index(r) res = ft.rangesum(li, ri) ans += res print(ans)