結果
問題 | No.2992 Range ABCD String Query |
ユーザー |
|
提出日時 | 2024-12-15 10:30:21 |
言語 | PyPy3 (7.3.15) |
結果 |
MLE
|
実行時間 | - |
コード長 | 2,571 bytes |
コンパイル時間 | 456 ms |
コンパイル使用メモリ | 82,488 KB |
実行使用メモリ | 703,028 KB |
最終ジャッジ日時 | 2024-12-16 23:34:36 |
合計ジャッジ時間 | 189,025 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 12 TLE * 12 MLE * 17 |
ソースコード
class SegTree:def __init__(self, op, e, lst):if type(lst) is int:self.n = lstelse:self.n = len(lst)self.N0 = 2 ** (self.n - 1).bit_length()self.op = opself.e = eself.data = [e] * (2 * self.N0)if type(lst) is list:for i in range(self.n):self.data[self.N0 + i] = lst[i]for i in range(self.N0 - 1, 0, -1):self.data[i] = self.op(self.data[2*i], self.data[2*i+1])def get(self, i):return self.data[self.N0+i]def update(self, i, x): #a_iの値をxに更新i += self.N0self.data[i] = xwhile i > 1:i >>= 1self.data[i] = self.op(self.data[2*i], self.data[2*i+1])def add(self, i, x):i += self.N0self.data[i] = self.op(x, self.data[i])while i > 1:i >>= 1self.data[i] = self.op(self.data[2*i], self.data[2*i+1])def set(self, i, x):i += self.N0self.data[i] = xwhile i > 1:i >>= 1self.data[i] = self.op(self.data[2*i], self.data[2*i+1])def prod(self, l, r):if r <= l:return self.elres = self.erres = self.el += self.N0r += self.N0while l < r:if l & 1:lres = self.op(lres, self.data[l])l += 1if r & 1:r -= 1rres = self.op(self.data[r], rres)l >>= 1r >>= 1return self.op(lres, rres)inf = 1<<60N,Q = map(int, input().split())S = input()def make_matrix(c):x = ord(c) - ord("A")A = [[inf]*4 for i in range(4)]for i in range(4):for j in range(i,4):if i <= x <= j:A[i][j] = 0else:A[i][j] = 1return AD = []for i in range(N):D.append(make_matrix(S[i]))def op(X,Y):res = [[inf]*4 for i in range(4)]for i in range(4):for j in range(i,4):for k in range(i,j+1):res[i][j] = min(X[i][k]+Y[k][j], res[i][j])return rese = [[0]*4 for i in range(4)]st = SegTree(op, e, D)for _ in range(Q):t,x,c = input().split()if t == "1":x = int(x)-1st.set(x,make_matrix(c))else:l,r = int(x)-1,int(c)res = st.prod(l,r)ans = inffor i in range(4):ans = min(ans,min(res[i]))print(ans)