結果
問題 |
No.3265 地元に帰れば天才扱い!
|
ユーザー |
👑 ![]() |
提出日時 | 2025-09-13 01:32:54 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,192 bytes |
コンパイル時間 | 413 ms |
コンパイル使用メモリ | 82,592 KB |
実行使用メモリ | 133,660 KB |
最終ジャッジ日時 | 2025-09-13 01:33:06 |
合計ジャッジ時間 | 11,752 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | TLE * 1 -- * 20 |
ソースコード
class RangeBIT: def __init__(self,N,indexed): #0-indexed or 1-indexed 指定可能 self.bit1 = [0] * (N+2) self.bit2 = [0] * (N+2) self.mode = indexed def bitadd(self,a,w,bit): #aにwを加える(1-origin) x = a while x <= (len(bit)-1): bit[x] += w x += x & (-1 * x) def bitsum(self,a,bit): #ind 1~aまでの和を求める ret = 0 x = a while x > 0: ret += bit[x] x -= x & (-1 * x) return ret def add(self,l,r,w): #半開区間[l,r)にwを加える l = l + (1-self.mode) r = r + (1-self.mode) self.bitadd(l,-1*w*l,self.bit1) self.bitadd(r,w*r,self.bit1) self.bitadd(l,w,self.bit2) self.bitadd(r,-1*w,self.bit2) def sum(self,l,r): #半開区間[l,r)の区間和 l = l + (1-self.mode) r = r + (1-self.mode) ret = self.bitsum(r,self.bit1) + r * self.bitsum(r,self.bit2) ret -= self.bitsum(l,self.bit1) + l * self.bitsum(l,self.bit2) return ret import sys N,M = map(int,input().split()) BitSum = RangeBIT(M,0) BitLR = RangeBIT(M,0) ApLR = [] for i in range(N): A,L,R = map(int,input().split()) L -= 1 R -= 1 BitSum.add(i,i+1,A) ApLR.append( (A,i,L,R) ) BitLR.add(L,R+1,1) ans = 0 for i in range(N): A,p,L,R = ApLR[i] ans += (R-L+1) * A - BitSum.sum(L,R+1) #print (ans,file=sys.stderr) Q = int(input()) for _ in range(Q): i,Y,U,V = map(int,input().split()) i -= 1 Y -= 1 U -= 1 V -= 1 # 削除 A,p,L,R = ApLR[i] BitLR.add(L,R+1,-1) ans -= (R-L+1) * A - BitSum.sum(L,R+1) #print ((R-L+1) * A - BitSum.sum(L,R+1),file=sys.stderr) ans -= -1 * BitLR.sum(p,p+1) * A #print (-1 * BitLR.sum(p,p+1) * A,file=sys.stderr) BitSum.add(p,p+1,-A) # 追加 ApLR[i] = (A,Y,U,V) A,p,L,R = ApLR[i] BitLR.add(L,R+1,1) ans += (R-L+1) * A - BitSum.sum(L,R+1) #print ((R-L+1) * A - BitSum.sum(L,R+1),file=sys.stderr) ans += -1 * BitLR.sum(p,p+1) * A #print (-1 * BitLR.sum(p,p+1) * A,file=sys.stderr) BitSum.add(p,p+1,A) print (ans)