結果
| 問題 | No.8121 [Deleted] |
| コンテスト | |
| ユーザー |
Koi
|
| 提出日時 | 2025-04-01 22:54:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,085 bytes |
| コンパイル時間 | 183 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 105,400 KB |
| 最終ジャッジ日時 | 2025-04-01 22:54:22 |
| 合計ジャッジ時間 | 6,328 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | WA * 10 |
ソースコード
class SegTree:
def __init__(self,N,A,op,e) -> None:
#N:数列の長さ
#A:数列の初期状態
#op:区間で答えたいもの
#e:∀a,op(a,e)=aとなる単位元e
size=1
log_size=1
while size<N:
size*=2
log_size+=1
#size:セグ木の横の大きさ
#log_size:セグ木の深さ
self.size=size
self.log_size=log_size
self.op=op
self.e=e
self.tree=[e]*(2*size)
for i in range(N):
self.tree[size+i]=A[i]
for i in range((size-1),0,-1):
self.tree[i]=op(self.tree[2*i],self.tree[2*i+1])
#treeの0番目の値は使用しない(欠番)
#seg_treeを深さ順に出力
#時間計算量O(N)
def print_seg_tree(self):
for i in range(self.log_size):
print(self.tree[2**i:2**(i+1)])
#Aのi番目(0-indexed)の要素を取得
#時間計算量O(1)
def get(self,i):
return self.tree[self.size+i]
#Aのi番目(0-indexed)の要素をxに変更
#時間計算量O(logN)
def update(self,i,x):
i+=self.size
self.tree[i]=x
while i>1:
i=i//2
self.tree[i]=self.op(self.tree[2*i],self.tree[2*i+1])
#Aの[l,r)に対するopを取得(0-indexed)
def range_op(self,l,r):
l+=self.size
r+=self.size
left_result=self.e
right_result=self.e
while l<r:
if(l%2==1):
left_result=self.op(left_result,self.tree[l])
l+=1
if(r%2==1):
right_result=self.op(right_result,self.tree[r-1])
r-=1
l=l//2
r=r//2
return self.op(left_result,right_result)
N,Q=map(int,input().split())
A=list(map(int, input().split()))
ST=SegTree(N,A,max,-1)
Ans = []
for i in range(Q):
r, a, b = map(int, input().split())
if(r == 2):
Ans.append(ST.range_op(a - 1, b))
else:
ST.update(a - 1, ST.get(a - 1) + b)
for x in Ans:
print(x)
Koi