結果
問題 |
No.2554 MMA文字列2 (Query Version)
|
ユーザー |
![]() |
提出日時 | 2025-02-23 11:07:15 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,242 bytes |
コンパイル時間 | 646 ms |
コンパイル使用メモリ | 82,128 KB |
実行使用メモリ | 182,248 KB |
最終ジャッジ日時 | 2025-02-23 11:07:29 |
合計ジャッジ時間 | 13,409 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | WA * 2 |
other | WA * 11 TLE * 1 -- * 43 |
ソースコード
n=int(input()) B=224 k=26 def op(x,y): z=[0]*(k+k+1) for i in range(k+k+1): z[i]=x[i]+y[i] c=0 for i in range(k): c+=x[i]*(x[i]-1)//2 for i in range(k): z[-1]+=(c-x[i]*(x[i]-1)//2)*y[i] for i in range(k): z[-1]+=x[i]*y[k+i] c=0 for i in range(k): c+=y[i] for i in range(k): z[k+i]+=x[i]*(c-y[i]) return tuple(z) q1=[tuple([0]*(k+k+1)) for i in range(B*B)] q2=[tuple([0]*(k+k+1)) for i in range(B)] s=input() for i in range(n): q=[0]*(k+k+1) q[ord(s[i])-ord("A")]=1 q1[i]=tuple(q) for i in range(B): q=tuple([0]*(k+k+1)) for j in range(B): q=op(q,q1[i*B+j]) q2[i]=q Q=int(input()) for _ in range(Q): t,p1,p2=input().split() t=int(t) if t==1: x=int(p1)-1 c=p2 q=[0]*(k+k+1) q[ord(c)-ord("A")]=1 q1[i]=tuple(q) y=x//B q=tuple([0]*(k+k+1)) for i in range(B): q=op(q,q1[y*B+i]) q2[y]=q if t==2: l=int(p1)-1 r=int(p2)-1 yl=l//B yr=r//B q=tuple([0]*(k+k+1)) if yl==yr: for i in range(l,r+1): q=op(q,q1[i]) else: for i in range(l,yl*B+B): q=op(q,q1[i]) for i in range(yl+1,yr): q=op(q,q2[i]) for i in range(yr*B,r+1): q=op(q,q1[i]) print(q[-1])