結果
| 問題 |
No.3265 地元に帰れば天才扱い!
|
| コンテスト | |
| ユーザー |
👑 SPD_9X2
|
| 提出日時 | 2025-09-13 01:33:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 2,228 bytes |
| コンパイル時間 | 548 ms |
| コンパイル使用メモリ | 82,692 KB |
| 実行使用メモリ | 151,912 KB |
| 最終ジャッジ日時 | 2025-09-13 01:34:41 |
| 合計ジャッジ時間 | 13,318 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | TLE * 12 -- * 9 |
ソースコード
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())
ANS = []
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)
ANS.append(ans)
print (*ANS,sep="\n")
SPD_9X2