結果
問題 | 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 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 42 ms
52,480 KB |
testcase_01 | AC | 43 ms
52,864 KB |
testcase_02 | AC | 43 ms
52,864 KB |
testcase_03 | AC | 42 ms
52,352 KB |
testcase_04 | AC | 43 ms
52,480 KB |
testcase_05 | AC | 187 ms
77,056 KB |
testcase_06 | AC | 263 ms
77,336 KB |
testcase_07 | AC | 186 ms
75,876 KB |
testcase_08 | AC | 368 ms
79,532 KB |
testcase_09 | AC | 1,128 ms
84,864 KB |
testcase_10 | AC | 1,455 ms
86,172 KB |
testcase_11 | AC | 622 ms
79,552 KB |
testcase_12 | AC | 1,151 ms
84,772 KB |
testcase_13 | AC | 344 ms
78,036 KB |
testcase_14 | AC | 596 ms
86,192 KB |
testcase_15 | AC | 1,868 ms
92,160 KB |
testcase_16 | AC | 1,688 ms
89,588 KB |
testcase_17 | AC | 2,129 ms
90,520 KB |
testcase_18 | AC | 1,194 ms
88,712 KB |
testcase_19 | AC | 1,375 ms
89,360 KB |
ソースコード
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)