結果
| 問題 |
No.2992 Range ABCD String Query
|
| コンテスト | |
| ユーザー |
nikoro256
|
| 提出日時 | 2024-12-17 00:46:58 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,250 bytes |
| コンパイル時間 | 509 ms |
| コンパイル使用メモリ | 82,148 KB |
| 実行使用メモリ | 67,624 KB |
| 最終ジャッジ日時 | 2024-12-17 00:47:04 |
| 合計ジャッジ時間 | 5,317 ms |
|
ジャッジサーバーID (参考情報) |
judge4 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | RE * 41 |
ソースコード
from atcoder import segtree
N,Q=map(int,input().split())
S=input()
S=list(S)
"""
a
b
c
d
ab
bc
cd
da
abc
bcd
d
"""
change = []
for i in range(4):
for j in range(4):
if j + i < 4:
change.append((j,j+i))
move = []
for k in range(len(change)):
for t in range(len(change)):
if change[k][1] <= change[t][0]:
new = (change[k][0],change[t][1])
move.append((k,t,change.index(new)))
s = "ABCD"
def one(n):
count = 0
res = []
for i in range(4):
for j in range(4):
if j + i < 4:
count += 1
if j <= n <= j+i:
res.append(0)
else:
res.append(1)
return tuple(res)
def op(a,b):
new = [10**10 for _ in range(10)]
for a_,b_,c in move:
new[c] =min(new[c], a[a_]+b[b_])
return tuple(new)
st = segtree.SegTree(op=lambda a,b:op(a,b),e=tuple(0 for _ in range(10)),v=[one(s.index(S[i])) for i in range(N)])
for _ in range(Q):
q=list(map(str,input().split()))
if q[0] == "1":
_,x,c = q
x=int(x)
st.set(x-1,one(s.index(c)))
else:
_,l,r = q
l=int(l)
r=int(r)
ans=st.prod(l-1,r)
print(min(ans))
nikoro256