結果
| 問題 |
No.1471 Sort Queries
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2021-05-02 19:48:57 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 200 ms / 2,000 ms |
| コード長 | 1,513 bytes |
| コンパイル時間 | 772 ms |
| コンパイル使用メモリ | 82,048 KB |
| 実行使用メモリ | 86,400 KB |
| 最終ジャッジ日時 | 2024-07-21 05:00:25 |
| 合計ジャッジ時間 | 7,272 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 37 |
ソースコード
import collections
import sys
def resolve():
readline = sys.stdin.readline
n,q = map(int,readline().split())
s = readline().strip()
seg = SegTree(s)
deq = collections.deque()
orda = ord('a')
for i in range(q):
l,r,x = map(int,readline().split())
result = 0
for chrid, chrsum in enumerate(seg.fold(l-1,r),orda):
result += chrsum
if x <= result:
deq.append(chr(chrid))
break
print(*deq,sep='\n')
class SegTree:
"""
reffered to 'maspy', noncommutative operation is available
X_f = min, X_unit = INF
X_f = max, X_unit = -INF
X_f = sum, X_unit = 0
X_f = lambda _,a,b: a+b, X_unit = ''
"""
orda = ord('a')
X_f = lambda _,a,b:[ai+bi for ai,bi in zip(a,b)]
def __init__(self, string):
self.N = len(string)
self.X = [[0]*26 for _ in range(self.N*2)]
for i, c in enumerate(string,self.N):
self.X[i][ord(c)-self.orda] = 1
for i in range(self.N - 1, 0, -1):
self.X[i] = self.X_f(self.X[i << 1], self.X[i << 1 | 1])
def fold(self, L, R):#[L,R)
L += self.N
R += self.N
vL = [0]*26
vR = [0]*26
while L < R:
if L & 1:
vL = self.X_f(vL, self.X[L])
L += 1
if R & 1:
R -= 1
vR = self.X_f(self.X[R], vR)
L >>= 1
R >>= 1
return self.X_f(vL, vR)
resolve()