結果
| 問題 | No.230 Splarraay スプラレェーイ |
| コンテスト | |
| ユーザー |
CHOHCOOH2
|
| 提出日時 | 2019-07-16 10:05:02 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 2,129 ms / 5,000 ms |
| コード長 | 2,068 bytes |
| コンパイル時間 | 270 ms |
| コンパイル使用メモリ | 82,304 KB |
| 実行使用メモリ | 92,160 KB |
| 最終ジャッジ日時 | 2024-11-30 02:21:28 |
| 合計ジャッジ時間 | 16,989 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 17 |
ソースコード
import sys
input=sys.stdin.readline
N=int(input())
n=1
while(n<N):
n*=2
INF=0
dat=[INF]*(2*n-1)
lazy=[-1]*(2*n-1)
def find(a,b,k,l,r):
if r<=a or b<=l:
return INF
eval(k,l,r)
if a<=l and r<=b:
return dat[k]
else:
vl=find(a,b,k*2+1,l,(l+r)//2)
vr=find(a,b,k*2+2,(l+r)//2,r)
return vl+vr
def eval(k,l,r):
if lazy[k]!=-1:#遅延配列が0かどうか
dat[k]=lazy[k]
if r-l>1:#最下段かのチェック
lazy[2*k+1]=lazy[k]//2
lazy[2*k+2]=lazy[k]//2
lazy[k]=-1#伝搬終了
def add(a,b,x,k,l,r):
eval(k,l,r)
if b<=l or r<=a:
return
if a<=l and r<=b:
lazy[k]=(r-l)*x
eval(k,l,r)
else:
add(a,b,x,2*k+1,l,(l+r)//2)
add(a,b,x,2*k+2,(l+r)//2,r)
dat[k]=dat[2*k+1]+dat[2*k+2]
dat1=[INF]*(2*n-1)
lazy1=[0]*(2*n-1)
def find1(a,b,k,l,r):
if r<=a or b<=l:
return INF
eval1(k,l,r)
if a<=l and r<=b:
return dat1[k]
else:
vl=find1(a,b,k*2+1,l,(l+r)//2)
vr=find1(a,b,k*2+2,(l+r)//2,r)
return vl+vr
def eval1(k,l,r):
if lazy1[k]!=-1:#遅延配列が0かどうか
dat1[k]=lazy1[k]
if r-l>1:#最下段かのチェック
lazy1[2*k+1]=lazy1[k]//2
lazy1[2*k+2]=lazy1[k]//2
lazy1[k]=-1#伝搬終了
def add1(a,b,x,k,l,r):
eval1(k,l,r)
if b<=l or r<=a:
return
if a<=l and r<=b:
lazy1[k]=(r-l)*x
eval1(k,l,r)
else:
add1(a,b,x,2*k+1,l,(l+r)//2)
add1(a,b,x,2*k+2,(l+r)//2,r)
dat1[k]=dat1[2*k+1]+dat1[2*k+2]
ap=0
bp=0
Q=int(input())
for i in range(Q):
x,l,r=map(int,input().split())
if x==0:
f=find1(l,r+1,0,0,n)
a=find(l,r+1,0,0,n)
b=f-a
if a>b:
ap+=a
elif b>a:
bp+=b
elif x==1:
add(l,r+1,1,0,0,n)
add1(l,r+1,1,0,0,n)
elif x==2:
add(l,r+1,0,0,0,n)
add1(l,r+1,1,0,0,n)
f=find1(0,N,0,0,n)
a=find(0,N,0,0,n)
b=f-a
ap+=a
bp+=b
print(ap,bp)
CHOHCOOH2