#x1074. Fedya the Potter Strikes Back

Fedya the Potter Strikes Back

Fedya the Potter Strikes Back

题面翻译

给定一个字符串 SS 和一个序列 WW,初始时它们都为空。

你需要在线完成 nn 次操作。每次操作在 SS 后面添加一个字符 cic_i,在序列 WW 后面添加一个数字 wiw_i。二者均加密。

加密规则如下:设 ansans 为上一个查询的答案,初始值为 00。将 cic_i 按字典序后移 ansans 位,将 wiw_i 改成 wi(ans&M)w_i\oplus (ans \operatorname{\&} M),其中 M=2301M = 2^{30} - 1。特别地,定义 z 后移一位为 a

定义一个子区间 [L,R][L, R] 的可疑度为: 若子串 [L,R][L,R] 和前缀 [1,RL+1][1,R-L+1] 相同,则其可疑度为 mini=LRWi\min_{i=L}^{R} W_i。否则其可疑度为 00

每次操作后,你都要求出当前的串的所有子区间的可疑度之和。

1n6×1051\leq n\leq 6\times 10 ^ 50wi<2300\leq w_i < 2 ^ {30}cic_i 为小写字母。

题目描述

Fedya has a string S S , initially empty, and an array W W , also initially empty.

There are n n queries to process, one at a time. Query i i consists of a lowercase English letter ci c_i and a nonnegative integer wi w_i . First, ci c_i must be appended to S S , and wi w_i must be appended to W W . The answer to the query is the sum of suspiciousnesses for all subsegments of W W [L, R] [L, \ R] , (1LRi) (1 \leq L \leq R \leq i) .

We define the suspiciousness of a subsegment as follows: if the substring of S S corresponding to this subsegment (that is, a string of consecutive characters from L L -th to R R -th, inclusive) matches the prefix of S S of the same length (that is, a substring corresponding to the subsegment [1, RL+1] [1, \ R - L + 1] ), then its suspiciousness is equal to the minimum in the array W W on the [L, R] [L, \ R] subsegment. Otherwise, in case the substring does not match the corresponding prefix, the suspiciousness is 0 0 .

Help Fedya answer all the queries before the orderlies come for him!

输入格式

The first line contains an integer n n (1n600000) (1 \leq n \leq 600\,000) — the number of queries.

The i i -th of the following n n lines contains the query i i : a lowercase letter of the Latin alphabet ci c_i and an integer wi w_i (0wi2301) (0 \leq w_i \leq 2^{30} - 1) .

All queries are given in an encrypted form. Let ans ans be the answer to the previous query (for the first query we set this value equal to 0 0 ). Then, in order to get the real query, you need to do the following: perform a cyclic shift of ci c_i in the alphabet forward by ans ans , and set wi w_i equal to wi(ans & MASK) w_i \oplus (ans \ \& \ MASK) , where \oplus is the bitwise exclusive "or", & \& is the bitwise "and", and MASK=2301 MASK = 2^{30} - 1 .

输出格式

Print n n lines, i i -th line should contain a single integer — the answer to the i i -th query.

样例 #1

样例输入 #1

7
a 1
a 0
y 3
y 5
v 4
u 6
r 8

样例输出 #1

1
2
4
5
7
9
12

样例 #2

样例输入 #2

4
a 2
y 2
z 0
y 2

样例输出 #2

2
2
2
2

样例 #3

样例输入 #3

5
a 7
u 5
t 3
s 10
s 11

样例输出 #3

7
9
11
12
13

提示

For convenience, we will call "suspicious" those subsegments for which the corresponding lines are prefixes of S S , that is, those whose suspiciousness may not be zero.

As a result of decryption in the first example, after all requests, the string S S is equal to "abacaba", and all wi=1 w_i = 1 , that is, the suspiciousness of all suspicious sub-segments is simply equal to 1 1 . Let's see how the answer is obtained after each request:

1. S S = "a", the array W W has a single subsegment — [1, 1] [1, \ 1] , and the corresponding substring is "a", that is, the entire string S S , thus it is a prefix of S S , and the suspiciousness of the subsegment is 1 1 .

2. S S = "ab", suspicious subsegments: [1, 1] [1, \ 1] and [1, 2] [1, \ 2] , total 2 2 .

3. S S = "aba", suspicious subsegments: [1, 1] [1, \ 1] , [1, 2] [1, \ 2] , [1, 3] [1, \ 3] and [3, 3] [3, \ 3] , total 4 4 .

4. S S = "abac", suspicious subsegments: [1, 1] [1, \ 1] , [1, 2] [1, \ 2] , [1, 3] [1, \ 3] , [1, 4] [1, \ 4] and [3, 3] [3, \ 3] , total 5 5 .

5. S S = "abaca", suspicious subsegments: [1, 1] [1, \ 1] , [1, 2] [1, \ 2] , [1, 3] [1, \ 3] , [1, 4] [1, \ 4] , [1, 5] [1, \ 5] , [3, 3] [3, \ 3] and [5, 5] [5, \ 5] , total 7 7 .

6. S S = "abacab", suspicious subsegments: [1, 1] [1, \ 1] , [1, 2] [1, \ 2] , [1, 3] [1, \ 3] , [1, 4] [1, \ 4] , [1, 5] [1, \ 5] , [1, 6] [1, \ 6] , [3, 3] [3, \ 3] , [5, 5] [5, \ 5] and [5, 6] [5, \ 6] , total 9 9 .

7. S S = "abacaba", suspicious subsegments: [1, 1] [1, \ 1] , [1, 2] [1, \ 2] , [1, 3] [1, \ 3] , [1, 4] [1, \ 4] , [1, 5] [1, \ 5] , [1, 6] [1, \ 6] , [1, 7] [1, \ 7] , [3, 3] [3, \ 3] , [5, 5] [5, \ 5] , [5, 6] [5, \ 6] , [5, 7] [5, \ 7] and [7, 7] [7, \ 7] , total 12 12 .

In the second example, after all requests S S = "aaba", W=[2,0,2,0] W = [2, 0, 2, 0] .

1. S S = "a", suspicious subsegments: [1, 1] [1, \ 1] (suspiciousness 2 2 ), totaling 2 2 .

2. S S = "aa", suspicious subsegments: [1, 1] [1, \ 1] ( 2 2 ), [1, 2] [1, \ 2] ( 0 0 ), [2, 2] [2, \ 2] ( 0 0 ), totaling 2 2 .

3. S S = "aab", suspicious subsegments: [1, 1] [1, \ 1] ( 2 2 ), [1, 2] [1, \ 2] ( 0 0 ), [1, 3] [1, \ 3] ( 0 0 ), [2, 2] [2, \ 2] ( 0 0 ), totaling 2 2 .

4. S S = "aaba", suspicious subsegments: [1, 1] [1, \ 1] ( 2 2 ), [1, 2] [1, \ 2] ( 0 0 ), [1, 3] [1, \ 3] ( 0 0 ), [1, 4] [1, \ 4] ( 0 0 ), [2, 2] [2, \ 2] ( 0 0 ), [4, 4] [4, \ 4] ( 0 0 ), totaling 2 2 .

In the third example, from the condition after all requests S S = "abcde", W=[7,2,10,1,7] W = [7, 2, 10, 1, 7] .

1. S S = "a", suspicious subsegments: [1, 1] [1, \ 1] ( 7 7 ), totaling 7 7 .

2. S S = "ab", suspicious subsegments: [1, 1] [1, \ 1] ( 7 7 ), [1, 2] [1, \ 2] ( 2 2 ), totaling 9 9 .

3. S S = "abc", suspicious subsegments: [1, 1] [1, \ 1] ( 7 7 ), [1, 2] [1, \ 2] ( 2 2 ), [1, 3] [1, \ 3] ( 2 2 ), totaling 11 11 .

4. S S = "abcd", suspicious subsegments: [1, 1] [1, \ 1] ( 7 7 ), [1, 2] [1, \ 2] ( 2 2 ), [1, 3] [1, \ 3] ( 2 2 ), [1, 4] [1, \ 4] ( 1 1 ), totaling 12 12 .

5. S S = "abcde", suspicious subsegments: [1, 1] [1, \ 1] ( 7 7 ), [1, 2] [1, \ 2] ( 2 2 ), [1, 3] [1, \ 3] ( 2 2 ), [1, 4] [1, \ 4] ( 1 1 ), [1, 5] [1, \ 5] ( 1 1 ), totaling 13 13 .