結果
| 問題 |
No.789 範囲の合計
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-05-05 18:16:18 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,812 bytes |
| コンパイル時間 | 215 ms |
| コンパイル使用メモリ | 13,056 KB |
| 実行使用メモリ | 29,340 KB |
| 最終ジャッジ日時 | 2024-06-26 23:44:43 |
| 合計ジャッジ時間 | 7,512 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 4 WA * 2 RE * 9 |
ソースコード
import sys
sys.setrecursionlimit(100000000)
input = sys.stdin.readline
from bisect import bisect_left
class SegmentTree():
f = lambda self,x,y:x + y
unit = 0
def __init__(self,array):
self.N = len(array)
self.tree = [self.unit] * (2*self.N)
#self._build(array)
def _build(self,array):
for i,x in enumerate(array,self.N):
self.tree[i] = x
for i in range(self.N - 1,0,-1):
self.tree[i] = self.f(self.tree[i << 1],self.tree[i << 1|1])
def update(self,k,x):
k += self.N
self.tree[k] = x
while k > 1:
k >>= 1
self.tree[k] = self.f(self.tree[k << 1],self.tree[k << 1|1])
def query(self,l,r):
l += self.N
r += self.N
vl = self.unit
vr = self.unit
while l < r:
if l&1:
vl = self.f(vl,self.tree[l])
l += 1
if r&1:
r -= 1
vr = self.f(self.tree[r],vr)
l >>= 1
r >>= 1
return self.f(vl,vr)
def __str__(self):
return '\n'.join(' '.join(str(v) for v in self.tree[1<<i:1<<(i + 1)]) for i in range((2*self.N).bit_length()))
def main():
N = int(input())
Q = [tuple(map(int,input().split())) for _ in range(N)]
value = [b for a,b,c in Q if a == 0]
toID = sorted(list(set(value)))
st = SegmentTree([0] * len(value))
ans = 0
for a,b,c in Q:
if a == 0:
i = bisect_left(toID,b)
before = st.query(i,i + 1)
new = before + c
st.update(i,new)
else:
l = bisect_left(toID,b)
r = bisect_left(toID,c)
ans += st.query(l,r + 1)
print(ans)
if __name__ == '__main__':
main()