結果
問題 |
No.789 範囲の合計
|
ユーザー |
![]() |
提出日時 | 2025-03-10 02:43:30 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
|
実行時間 | - |
コード長 | 1,836 bytes |
コンパイル時間 | 457 ms |
コンパイル使用メモリ | 12,672 KB |
実行使用メモリ | 48,228 KB |
最終ジャッジ日時 | 2025-03-10 02:43:43 |
合計ジャッジ時間 | 12,316 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 8 TLE * 7 |
ソースコード
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) v2i = {} for i, val in enumerate(sorted(inds)): v2i[val] = i del inds gc.collect() ft = FenwickTree(len(v2i)+10) ans = 0 for i in range(N): if queries[i][0] == 0: x, y = queries[i][1], queries[i][2] p = v2i[x] ft.add(p, y) elif queries[i][0] == 1: l, r = queries[i][1], queries[i][2] li = v2i[l] ri = v2i[r] res = ft.rangesum(li, ri) ans += res print(ans)