結果
| 問題 |
No.2554 MMA文字列2 (Query Version)
|
| コンテスト | |
| ユーザー |
sasa8uyauya
|
| 提出日時 | 2025-02-23 12:15:24 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 2,201 ms / 5,000 ms |
| コード長 | 1,127 bytes |
| コンパイル時間 | 324 ms |
| コンパイル使用メモリ | 82,284 KB |
| 実行使用メモリ | 278,208 KB |
| 最終ジャッジ日時 | 2025-02-23 12:17:03 |
| 合計ジャッジ時間 | 79,646 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 55 |
ソースコード
n=int(input())
L=1<<16
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 z
q=[[0]*(k+k+1) for i in range(L*2)]
s=input()
for i in range(n):
p=L+i
q[p][ord(s[i])-ord("A")]=1
p//=2
while p>0:
q[p]=op(q[p*2+0],q[p*2+1])
p//=2
Q=int(input())
for _ in range(Q):
t,p1,p2=input().split()
t=int(t)
if t==1:
c=p2
p=L+int(p1)-1
q[p]=[0]*(k+k+1)
q[p][ord(c)-ord("A")]=1
p//=2
while p>0:
q[p]=op(q[p*2+0],q[p*2+1])
p//=2
if t==2:
l=L+int(p1)-1
r=L+int(p2)-1
pl=[]
pr=[]
while l<=r:
if l%2==1:
pl+=[l]
l+=1
if r%2==0:
pr+=[r]
r-=1
l//=2
r//=2
if len(pl)>0 and len(pr)>0 and pl[-1]==pr[-1]:
pr.pop()
a=[0]*(k+k+1)
for p in pl:
a=op(a,q[p])
for p in pr[::-1]:
a=op(a,q[p])
print(a[-1])
sasa8uyauya