結果
問題 | No.2338 Range AtCoder Query |
ユーザー | とりゐ |
提出日時 | 2023-06-02 23:42:54 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,208 bytes |
コンパイル時間 | 1,064 ms |
コンパイル使用メモリ | 81,792 KB |
実行使用メモリ | 214,324 KB |
最終ジャッジ日時 | 2024-06-09 02:11:08 |
合計ジャッジ時間 | 9,016 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 44 ms
59,776 KB |
testcase_01 | AC | 43 ms
54,656 KB |
testcase_02 | AC | 44 ms
54,528 KB |
testcase_03 | AC | 42 ms
54,400 KB |
testcase_04 | AC | 42 ms
54,400 KB |
testcase_05 | AC | 41 ms
54,400 KB |
testcase_06 | AC | 122 ms
78,464 KB |
testcase_07 | AC | 117 ms
77,664 KB |
testcase_08 | AC | 117 ms
77,440 KB |
testcase_09 | AC | 122 ms
78,208 KB |
testcase_10 | AC | 119 ms
77,900 KB |
testcase_11 | TLE | - |
testcase_12 | -- | - |
testcase_13 | -- | - |
testcase_14 | -- | - |
testcase_15 | -- | - |
testcase_16 | -- | - |
testcase_17 | -- | - |
testcase_18 | -- | - |
testcase_19 | -- | - |
testcase_20 | -- | - |
testcase_21 | -- | - |
testcase_22 | -- | - |
testcase_23 | -- | - |
testcase_24 | -- | - |
testcase_25 | -- | - |
testcase_26 | -- | - |
testcase_27 | -- | - |
testcase_28 | -- | - |
testcase_29 | -- | - |
testcase_30 | -- | - |
testcase_31 | -- | - |
testcase_32 | -- | - |
testcase_33 | -- | - |
testcase_34 | -- | - |
ソースコード
from sys import stdin input=lambda :stdin.readline()[:-1] debug=0 if debug: import random from collections import deque if debug: N,M,Q=10,10,10 else: N,M,Q=map(int,input().split()) memo=[deque() for i in range(M+1)] for i in range(M+1): memo[i].append(0) P,S=[0]*N,[0]*N for i in range(N): if debug: P[i]=random.randint(1,M) if random.randint(1,2)==1: S[i]='AC' else: S[i]='WA' else: P[i],S[i]=input().split() P[i]=int(P[i]) if S[i]=='WA': S[i]=0 else: S[i]=1 m=int(Q**0.5)+1 bucket=[[] for i in range(m)] if debug: print(P) print(S) for i in range(Q): if debug: l=random.randint(0,N-1) r=random.randint(0,N-1) print(l,r) if r<l: l,r=r,l else: l,r=map(lambda x:int(x)-1,input().split()) bucket[l*m//N].append((l,r,i)) for i in range(m): if i&1: bucket[i].sort(key=lambda x:-x[1]) else: bucket[i].sort(key=lambda x:x[1]) cnt=[0]*(M+1) cnt_ac=0 cnt_wa=0 def AddR(idx): global cnt_ac global cnt_wa Pi=P[idx] Si=S[idx] memo[Pi][-1]+=1 if Si==1: cnt[Pi]+=1 if cnt[Pi]==1: cnt_ac+=1 cnt_wa+=memo[Pi][-1]-1 memo[Pi].append(0) def AddL(idx): global cnt_ac global cnt_wa Pi=P[idx] Si=S[idx] if Si==1: memo[Pi].appendleft(0) memo[Pi][0]+=1 if Si==1: cnt[Pi]+=1 if cnt[Pi]==1: cnt_ac+=1 else: cnt_wa-=memo[Pi][1]-1 elif cnt[Pi]!=0: cnt_wa+=1 def DelR(idx): global cnt_ac global cnt_wa Pi=P[idx] Si=S[idx] if Si==0: memo[Pi][-1]-=1 if Si==1: memo[Pi].pop() memo[Pi][-1]-=1 cnt[Pi]-=1 if cnt[Pi]==0: cnt_ac-=1 cnt_wa-=memo[Pi][-1] def DelL(idx): global cnt_ac global cnt_wa Pi=P[idx] Si=S[idx] memo[Pi][0]-=1 if Si==0: if cnt[Pi]: cnt_wa-=1 else: memo[Pi].popleft() cnt[Pi]-=1 if cnt[Pi]==0: cnt_ac-=1 else: cnt_wa+=memo[Pi][0]-1 ans=[0]*Q L,R=0,0 AddR(0) for b in bucket: for l,r,id in b: while R<r: R+=1 AddR(R) while L>l: L-=1 AddL(L) while R>r: DelR(R) R-=1 while L<l: DelL(L) L+=1 ans[id]=(cnt_ac,cnt_wa) for i in ans: print(*i)