結果
問題 |
No.789 範囲の合計
|
ユーザー |
![]() |
提出日時 | 2025-03-14 09:41:40 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 2,369 bytes |
コンパイル時間 | 435 ms |
コンパイル使用メモリ | 82,376 KB |
実行使用メモリ | 139,356 KB |
最終ジャッジ日時 | 2025-03-14 09:41:44 |
合計ジャッジ時間 | 3,439 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 2 MLE * 1 -- * 12 |
ソースコード
import math class SegTree32way: class Node: def __init__(self, val=None, ch=None, e=0): self.val = val if val is not None else e self.ch = ch if ch is not None else [None]*32 def __init__(self, op, e, n): self.n = n self.op = op self.e = e self.root = self.Node(e=e) def _set(self, idx, val, node, L, R): if node is None: node = self.Node(e=self.e) if R - L == 1: node.val = val return node step = math.ceil((R - L) / 32) i = (idx - L) // step if i >= 32: i = 31 child_L = L + i * step child_R = min(R, L + (i + 1) * step) node.ch[i] = self._set(idx, val, node.ch[i], child_L, child_R) s = self.e for child in node.ch: s = self.op(s, child.val if child is not None else self.e) node.val = s return node def set(self, k, x): self.root = self._set(k, x, self.root, 0, self.n) def _get(self, idx, node, L, R): if node is None: return self.e if R - L == 1: return node.val step = math.ceil((R - L) / 32) i = (idx - L) // step if i >= 32: i = 31 child_L = L + i * step child_R = min(R, L + (i + 1) * step) return self._get(idx, node.ch[i], child_L, child_R) def get(self, k): return self._get(k, self.root, 0, self.n) def _prod(self, ql, qr, node, L, R): if qr <= L or R <= ql: return self.e if ql <= L and R <= qr: return node.val if node is not None else self.e res = self.e step = math.ceil((R - L) / 32) for i in range(32): child_L = L + i * step if child_L >= R: break child_R = min(R, L + (i + 1) * step) child = node.ch[i] if node is not None else None res = self.op(res, self._prod(ql, qr, child, child_L, child_R)) return res def prod(self, l, r): return self._prod(l, r, self.root, 0, self.n) def op(x,y): return x+y e=0 n=int(input()) st=SegTree32way(op,e,10**9+1) ans=0 for _ in range(n): t,x,y=map(int,input().split()) if t==0: st.set(x,st.get(x)+y) else: ans+=st.prod(x,y+1) print(ans)