結果
問題 | No.2338 Range AtCoder Query |
ユーザー | hirayuu_yc |
提出日時 | 2023-11-25 18:01:55 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,184 bytes |
コンパイル時間 | 494 ms |
コンパイル使用メモリ | 82,148 KB |
実行使用メモリ | 318,920 KB |
最終ジャッジ日時 | 2024-09-26 11:05:44 |
合計ジャッジ時間 | 10,435 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 45 ms
318,920 KB |
testcase_01 | AC | 47 ms
55,296 KB |
testcase_02 | AC | 45 ms
54,784 KB |
testcase_03 | AC | 45 ms
55,040 KB |
testcase_04 | AC | 45 ms
54,784 KB |
testcase_05 | AC | 45 ms
55,272 KB |
testcase_06 | WA | - |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | WA | - |
testcase_10 | WA | - |
testcase_11 | RE | - |
testcase_12 | RE | - |
testcase_13 | RE | - |
testcase_14 | RE | - |
testcase_15 | RE | - |
testcase_16 | TLE | - |
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 collections import deque class MoAlgorithm(): BIT=24 MASK=(1<<BIT)-1 def __init__(self,size): self.size=size self.query=[] def add_query(self,left,right): self.query.append((left<<self.BIT)+right) def solve(self,add_l,delete_l,add_r,delete_r,fix): size=self.size Q=len(self.query) backet=int((size*pow(3,0.5))/(pow(2*Q,0.5)))+1 aft=[0 for i in range(Q)] for i in range(Q): lf,ri=self.query[i]>>self.BIT,self.query[i]&self.MASK bac=lf//backet aft[i]=(((bac<<20)+(ri*(-1 if bac&1 else 1)))<<self.BIT)+i aft.sort() ans=[None for i in range(Q)] lf=0 ri=0 for x in aft: i=x&self.MASK l,r=self.query[i]>>self.BIT,self.query[i]&self.MASK while ri<r: add_r(ri);ri+=1 while lf>l: lf-=1;add_l(lf) while ri>r: ri-=1;delete_r(ri) while lf<l: delete_l(lf);lf+=1 ans[i]=fix() return ans def add_l(p): global wa,sol,solved,pena if res[p][1]=="WA": if len(wa[res[p][0]])==0: wa[res[p][0]].appendleft(1) elif wa[res[p][0]][0]==0: wa[res[p][0]].appendleft(1) pena+=1 else: wa[res[p][0]][0]+=1 if solved[res[p][0]]!=0: pena+=1 else: wa[res[p][0]].appendleft(0) solved[res[p][0]]+=1 if solved[res[p][0]]==1: sol+=1 def delete_l(p): global wa,sol,solved,pena if res[p][1]=="WA": wa[res[p][0]][0]-=1 if wa[res[p][0]][0]==0: wa[res[p][0]].popleft() if len(wa[res[p][0]])!=0: pena-=1 else: wa[res[p][0]].popleft() solved[res[p][0]]-=1 if solved[res[p][0]]==0: sol-=1 else: pena+=wa[res[p][0]][0] def add_r(p): global wa,sol,solved,pena if res[p][1]=="WA": if len(wa[res[p][0]])==0: wa[res[p][0]].append(1) elif wa[res[p][0]][-1]==0: wa[res[p][0]].append(1) else: wa[res[p][0]][-1]+=1 else: wa[res[p][0]].append(0) solved[res[p][0]]+=1 if solved[res[p][0]]==1: sol+=1 if len(wa[res[p][0]])>=2: pena+=wa[res[p][0]][-2] def delete_r(p): global wa,sol,solved,pena if res[p][1]=="WA": wa[res[p][0]][-1]-=1 if wa[res[p][0]][-1]==0: wa[res[p][0]].pop() else: wa[res[p][0]].pop() solved[res[p][0]]-=1 if solved[res[p][0]]==0: sol-=1 if len(wa[res[p][0]])>0: pena-=wa[res[p][0]][0] def fix(): return sol,pena N,M,Q=map(int,input().split()) res=[list(input().split()) for i in range(N)] for i in range(N): res[i]=(int(res[i][0])-1,res[i][1]) mo=MoAlgorithm(N) for i in range(N): L,R=map(int,input().split()) mo.add_query(L-1,R) wa=[deque() for i in range(M)] solved=[0]*N sol=0 pena=0 for i in mo.solve(add_l,delete_l,add_r,delete_r,fix): print(*i)