結果
問題 | No.1394 Changing Problems |
ユーザー |
|
提出日時 | 2020-09-07 01:20:27 |
言語 | PyPy3 (7.3.15) |
結果 |
RE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 3,343 bytes |
コンパイル時間 | 187 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 117,388 KB |
最終ジャッジ日時 | 2024-07-04 19:22:36 |
合計ジャッジ時間 | 11,005 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 1 RE * 2 |
other | WA * 18 RE * 11 |
ソースコード
class LazySegmentTree():def __init__(self,n,init,merge=min,merge_unit=(10**18,-1),operate=lambda x,y:(x[0]+y,x[1]),operate_unit=0):self.merge=mergeself.merge_unit=merge_unitself.operate=operateself.operate_unit=operate_unitself.n=(n-1).bit_length()self.data=[merge_unit for i in range(1<<(self.n+1))]self.lazy=[operate_unit for i in range(1<<(self.n+1))]if init:for i in range(n):self.data[2**self.n+i]=init[i]for i in range(2**self.n-1,0,-1):self.data[i]=self.merge(self.data[2*i],self.data[2*i+1])def propagate_above(self,i):m=i.bit_length()-1for bit in range(m,0,-1):v=i>>bitadd=self.lazy[v]self.lazy[v]=self.operate_unitself.data[2*v]=self.operate(self.data[2*v],add)self.data[2*v+1]=self.operate(self.data[2*v+1],add)self.lazy[2*v]=self.lazy[2*v] + addself.lazy[2*v+1]=self.lazy[2*v+1] + adddef remerge_above(self,i):while i:i>>=1self.data[i]=self.operate(self.merge(self.data[2*i],self.data[2*i+1]),self.lazy[i])def update(self,l,r,x):l+=1<<self.nr+=1<<self.nl0=l//(l&-l)r0=r//(r&-r)-1while l<r:if l&1:self.data[l]=self.operate(self.data[l],x)self.lazy[l]=self.lazy[l] + xl+=1if r&1:self.data[r-1]=self.operate(self.data[r-1],x)self.lazy[r-1]=self.lazy[r-1] + xl>>=1r>>=1self.remerge_above(l0)self.remerge_above(r0)def query(self,l,r):l+=1<<self.nr+=1<<self.nl0=l//(l&-l)r0=r//(r&-r)-1self.propagate_above(l0)self.propagate_above(r0)res=self.merge_unitwhile l<r:if l&1:res=self.merge(res,self.data[l])l+=1if r&1:res=self.merge(res,self.data[r-1])l>>=1r>>=1return resimport sysinput = sys.stdin.readlineN = int(input())A = list(map(int,input().split()))def solve_not_one():init = [0]*(N-1)Qsum = 0for a in A:q = (a+1) // (N-1)r = (a+1) % (N-1)init[r] += 1Qsum += qfor i in range(1,N-1):init[i] += init[i-1]init = [(i-init[i],i) for i in range(N-1)]LST = LazySegmentTree(N-1,init)Q = int(input())for _ in range(Q):query = tuple(map(int,input().split()))if query[0] == 1:gomi,i,x = queryi -= 1Qsum -= (A[i]+1) // (N-1)Qsum += (x+1) // (N-1)pre_r = (A[i]+1) % (N-1)LST.update(pre_r,N-1,1)next_r = (x+1) % (N-1)LST.update(next_r,N-1,-1)A[i] = xelse:q,r = LST.query(0,N-1)res = (N-1) * (Qsum + q) + rprint(res)def solve_one():Q = int(input())for _ in range(Q):query = tuple(map(int,input().split()))if query[0] == 1:A[0] = query[2]else:print(A[0]+1)if N==1:solve_one()else:solve_not_one()