結果
問題 | No.2020 Sum of Common Prefix Length |
ユーザー | siganai |
提出日時 | 2022-07-23 17:09:13 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 932 ms / 2,000 ms |
コード長 | 3,058 bytes |
コンパイル時間 | 292 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 328,264 KB |
最終ジャッジ日時 | 2024-07-05 06:31:55 |
合計ジャッジ時間 | 28,862 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 212 ms
191,776 KB |
testcase_01 | AC | 213 ms
191,372 KB |
testcase_02 | AC | 210 ms
191,680 KB |
testcase_03 | AC | 288 ms
206,968 KB |
testcase_04 | AC | 284 ms
206,948 KB |
testcase_05 | AC | 291 ms
207,008 KB |
testcase_06 | AC | 293 ms
206,980 KB |
testcase_07 | AC | 624 ms
259,720 KB |
testcase_08 | AC | 621 ms
259,668 KB |
testcase_09 | AC | 641 ms
259,224 KB |
testcase_10 | AC | 579 ms
259,224 KB |
testcase_11 | AC | 583 ms
259,816 KB |
testcase_12 | AC | 584 ms
259,872 KB |
testcase_13 | AC | 604 ms
259,680 KB |
testcase_14 | AC | 601 ms
259,292 KB |
testcase_15 | AC | 819 ms
289,864 KB |
testcase_16 | AC | 803 ms
293,292 KB |
testcase_17 | AC | 745 ms
288,392 KB |
testcase_18 | AC | 721 ms
276,656 KB |
testcase_19 | AC | 715 ms
280,356 KB |
testcase_20 | AC | 790 ms
321,584 KB |
testcase_21 | AC | 912 ms
316,780 KB |
testcase_22 | AC | 932 ms
312,636 KB |
testcase_23 | AC | 864 ms
325,344 KB |
testcase_24 | AC | 918 ms
319,160 KB |
testcase_25 | AC | 918 ms
328,264 KB |
testcase_26 | AC | 668 ms
298,952 KB |
testcase_27 | AC | 203 ms
191,840 KB |
testcase_28 | AC | 736 ms
269,864 KB |
testcase_29 | AC | 766 ms
270,324 KB |
testcase_30 | AC | 760 ms
269,032 KB |
testcase_31 | AC | 766 ms
315,872 KB |
testcase_32 | AC | 771 ms
317,992 KB |
testcase_33 | AC | 743 ms
299,144 KB |
testcase_34 | AC | 835 ms
285,768 KB |
testcase_35 | AC | 816 ms
286,156 KB |
testcase_36 | AC | 787 ms
315,316 KB |
testcase_37 | AC | 830 ms
299,160 KB |
ソースコード
#!/usr/bin/env PyPy3 from collections import Counter, defaultdict, deque import itertools import re import math from functools import reduce import operator import bisect from heapq import * import functools mod=998244353 import sys input=sys.stdin.readline class Bit:#0-indexed を 1-indexedに変換するので、0-indexedを入れる def __init__(self, n): self.size = n + 1 self.tree = [0] * (n + 2) self.depth = (n + 1).bit_length() def add(self, i, x): i += 1 while i <= self.size: self.tree[i] += x i += i & -i def sum(self, i): i += 1 s = 0 while i > 0: s += self.tree[i] i -= i & -i return s def lower_bound(self, x): """ 累積和がx以上になる最小のindexと、その直前までの累積和 """ sum_ = 0 pos = 0 for i in range(self.depth, -1, -1): k = pos + (1 << i) if k <= self.size and sum_ + self.tree[k] < x: sum_ += self.tree[k] pos += 1 << i return pos, sum_ n = int(input()) sl = [[] for _ in range(n)] for i in range(n): st = input().rstrip() for ss in st: sl[i].append(ord(ss) - ord('a')) sl2 = [sl[i][:] for i in range(n)] q = int(input()) qry = [] for _ in range(q): qe = list(map(str,input().rstrip().split())) if qe[0] == '1': sl2[int(qe[1]) - 1].append(ord(qe[2]) - ord('a')) qry.append(qe) nex = [[-1] * 26 for _ in range(400000)] lenn = 1 g = [[] for _ in range(400000)] for i in range(n): now = 0 for z in sl2[i]: if nex[now][z] == -1: nex[now][z] = lenn g[now].append(lenn) g[lenn].append(now) lenn += 1 now = nex[now][z] def EulerTour(n, X, i0): done = [0] * n par = [-1] * n Q = deque([~i0, i0]) # 根をスタックに追加 ET = [] while Q: i = Q.pop() if i >= 0: # 行きがけの処理 done[i] = 1 ET.append(i) for a in X[i]: if done[a]: continue par[a] = i Q.append(~a) # 帰りがけの処理をスタックに追加 Q.append(a) # 行きがけの処理をスタックに追加 else: # 帰りがけの処理 i = ~i ET.append(i) return ET ET = EulerTour(lenn,g,0) beg = [-1] * lenn end = [-1] * lenn for i in range(len(ET)): if beg[ET[i]] == -1: beg[ET[i]] = i else: end[ET[i]] = i bit = Bit(lenn * 2) pos = [0] * n for i in range(n): now = 0 for z in sl[i]: now = nex[now][z] bit.add(beg[now],1) bit.add(end[now],-1) pos[i] = now for i in range(q): if qry[i][0] == '1': x = int(qry[i][1]) - 1 z = ord(qry[i][2]) - ord('a') now = nex[pos[x]][z] bit.add(beg[now],1) bit.add(end[now],-1) pos[x] = now else: x = int(qry[i][1]) - 1 print(bit.sum(beg[pos[x]]))