結果
| 問題 |
No.230 Splarraay スプラレェーイ
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-01-07 10:48:05 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,643 bytes |
| コンパイル時間 | 277 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 24,320 KB |
| 最終ジャッジ日時 | 2024-11-08 20:38:58 |
| 合計ジャッジ時間 | 27,650 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 12 TLE * 2 -- * 3 |
ソースコード
class SegTree:
def __init__(self,n):
k = 1
while k < n:
k <<= 1
self.n = k
self.dat = [0] * (2 * self.n - 1)
self.lazy = [0] * (2 * self.n - 1)
def eval(self,k,l,r):
if self.lazy[k] == -1:return
if k < self.n-1:
self.lazy[k*2+1] = self.lazy[k]
self.lazy[k*2+2] = self.lazy[k]
self.dat[k] = self.lazy[k] * (r-l)
self.lazy[k] = -1
def update(self,a,b,x,k=0,l=0,r=-1):
if r == -1:r = self.n
self.eval(k,l,r)
if r <= a or b <= l:return
if a <= l and r <= b:
self.lazy[k] = x
self.eval(k,l,r)
return
self.update(a,b,x,k*2+1,l,(l+r)//2)
self.update(a,b,x,k*2+2,(l+r)//2,r)
self.dat[k] = self.dat[k*2+1]+self.dat[k*2+2]
def getsum(self,a,b,k=0,l=0,r=-1):
if r == -1:r = self.n
self.eval(k,l,r)
if r <= a or b <= l:return 0
if a <= l and r <= b:
return self.dat[k]
return self.getsum(a,b,k*2+1,l,(l+r)//2)+self.getsum(a,b,k*2+2,(l+r)//2,r)
N = int(input())
Q = int(input())
sega = SegTree(N)
segb = SegTree(N)
pointa = 0
pointb = 0
for _ in range(Q):
x,l,r = map(int,input().split())
r += 1
if x == 0:
a = sega.getsum(l,r)
b = segb.getsum(l,r)
if a < b:
pointb += b
elif b < a:
pointa += a
elif x == 1:
sega.update(l,r,1)
segb.update(l,r,0)
else:
sega.update(l,r,0)
segb.update(l,r,1)
a = sega.getsum(0,N)
b =segb.getsum(0,N)
pointa += a
pointb += b
print(pointa,pointb)