CF1286E.Fedya the Potter Strikes Back

NOI/NOI+/CTSC

通过率:0%

时间限制:4.00s

内存限制:256MB

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

Fedya has a string SS, initially empty, and an array WW, also initially empty.

There are nn queries to process, one at a time. Query ii consists of a lowercase English letter cic_i and a nonnegative integer wiw_i. First, cic_i must be appended to SS, and wiw_i must be appended to WW. The answer to the query is the sum of suspiciousnesses for all subsegments of WW [L, R][L, \ R], (1≤L≤R≤i)(1 \leq L \leq R \leq i).

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

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

费迪亚有一个字符串 SS(初始为空)和一个数组 WW(初始也为空)。

需要依次处理 nn 个查询。第 ii 个查询包含一个小写英文字母 cic_i 和一个非负整数 wiw_i。首先,将 cic_i 追加到 SS 的末尾,同时将 wiw_i 追加到 WW 的末尾。该查询的答案是:对所有满足 1≤L≤R≤i1 \leq L \leq R \leq i 的子段 [L, R][L,\ R],其“可疑度”之和。

我们定义子段的可疑度如下:若 SS 中对应于该子段的子串(即从第 LL 个字符到第 RR 个字符(含)构成的连续字符组成的字符串)与 SS 长度相同的前缀(即子段 [1, R−L+1][1,\ R - L + 1] 对应的子串)完全匹配,则该子段的可疑度等于数组 WW 在子段 [L, R][L,\ R] 上的最小值;否则(即该子串与对应前缀不匹配),可疑度为 00。

请帮助费迪亚在看守人员到来之前回答所有查询!

输入格式

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

The ii-th of the following nn lines contains the query ii: a lowercase letter of the Latin alphabet cic_i and an integer wiw_i (0≤wi≤230−1)(0 \leq w_i \leq 2^{30} - 1).

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

第一行包含一个整数 nn(1≤n≤600 0001 \leq n \leq 600\,000),表示查询的个数。

接下来的 nn 行中,第 ii 行包含第 ii 个查询:一个拉丁字母小写字母 cic_i 和一个整数 wiw_i(0≤wi≤230−10 \leq w_i \leq 2^{30} - 1)。

所有查询均以加密形式给出。令 ansans 表示上一个查询的答案(对于第一个查询,将该值设为 00)。为了还原出真实的查询,需执行以下操作:将字母 cic_i 在字母表中向前循环移动 ansans 位,并将 wiw_i 更新为 wi⊕(ans & MASK)w_i \oplus (ans \ \& \ MASK),其中 ⊕\oplus 表示按位异或运算,&\& 表示按位与运算,且 MASK=230−1MASK = 2^{30} - 1。

输出格式

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

输出 nn 行,第 ii 行应包含一个整数——即第 ii 个查询的答案。

输入输出样例

  • 输入#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

    4
    a 2
    y 2
    z 0
    y 2

    输出#2

    2
    2
    2
    2
  • 输入#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 SS, that is, those whose suspiciousness may not be zero.

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

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

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

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

4. SS = "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 55.

5. SS = "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 77.

6. SS = "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 99.

7. SS = "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 1212.

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

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

2. SS = "aa", suspicious subsegments: [1, 1][1, \ 1] (22), [1, 2][1, \ 2] (00), [2, 2][2, \ 2] ( 00), totaling 22.

3. SS = "aab", suspicious subsegments: [1, 1][1, \ 1] (22), [1, 2][1, \ 2] (00), [1, 3][1, \ 3] ( 00), [2, 2][2, \ 2] (00), totaling 22.

4. SS = "aaba", suspicious subsegments: [1, 1][1, \ 1] (22), [1, 2][1, \ 2] (00), [1, 3][1, \ 3] ( 00), [1, 4][1, \ 4] (00), [2, 2][2, \ 2] (00), [4, 4][4, \ 4] (00), totaling 22.

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

1. SS = "a", suspicious subsegments: [1, 1][1, \ 1] (77), totaling 77.

2. SS = "ab", suspicious subsegments: [1, 1][1, \ 1] (77), [1, 2][1, \ 2] (22), totaling 99.

3. SS = "abc", suspicious subsegments: [1, 1][1, \ 1] (77), [1, 2][1, \ 2] (22), [1, 3][1, \ 3] ( 22), totaling 1111.

4. SS = "abcd", suspicious subsegments: [1, 1][1, \ 1] (77), [1, 2][1, \ 2] (22), [1, 3][1, \ 3] ( 22), [1, 4][1, \ 4] (11), totaling 1212.

5. SS = "abcde", suspicious subsegments: [1, 1][1, \ 1] (77), [1, 2][1, \ 2] (22), [1, 3][1, \ 3] ( 22), [1, 4][1, \ 4] (11), [1, 5][1, \ 5] (11), totaling 1313.

为方便起见,我们将那些对应子串是 SS 的前缀的子区间称为“可疑的”,即这些子区间的可疑度可能不为零。

在第一个样例的解密结果中,所有操作执行完毕后,字符串 SS 为 "abacaba",且所有 wi=1w_i = 1,即所有可疑子区间的可疑度均为 11。下面我们逐次查看每次操作后的答案是如何得到的:

  1. SS = "a",数组 WW 仅含一个子区间 — [1, 1][1,\ 1],对应子串为 "a",即整个字符串 SS,因此它是 SS 的前缀,该子区间的可疑度为 11。

  2. SS = "ab",可疑子区间有:[1, 1][1,\ 1] 和 [1, 2][1,\ 2],共 22 个。

  3. SS = "aba",可疑子区间有:[1, 1][1,\ 1]、[1, 2][1,\ 2]、[1, 3][1,\ 3] 和 [3, 3][3,\ 3],共 44 个。

  4. SS = "abac",可疑子区间有:[1, 1][1,\ 1]、[1, 2][1,\ 2]、[1, 3][1,\ 3]、[1, 4][1,\ 4] 和 [3, 3][3,\ 3],共 55 个。

  5. SS = "abaca",可疑子区间有:[1, 1][1,\ 1]、[1, 2][1,\ 2]、[1, 3][1,\ 3]、[1, 4][1,\ 4]、[1, 5][1,\ 5]、[3, 3][3,\ 3] 和 [5, 5][5,\ 5],共 77 个。

  6. SS = "abacab",可疑子区间有:[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] 和 [5, 6][5,\ 6],共 99 个。

  7. SS = "abacaba",可疑子区间有:[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] 和 [7, 7][7,\ 7],共 1212 个。

在第二个样例中,所有操作执行完毕后,SS = "aaba",W=[2,0,2,0]W = [2, 0, 2, 0]。

  1. SS = "a",可疑子区间:[1, 1][1,\ 1](可疑度 22),总和为 22。

  2. SS = "aa",可疑子区间:[1, 1][1,\ 1](22)、[1, 2][1,\ 2](00)、[2, 2][2,\ 2](00),总和为 22。

  3. SS = "aab",可疑子区间:[1, 1][1,\ 1](22)、[1, 2][1,\ 2](00)、[1, 3][1,\ 3](00)、[2, 2][2,\ 2](00),总和为 22。

  4. SS = "aaba",可疑子区间:[1, 1][1,\ 1](22)、[1, 2][1,\ 2](00)、[1, 3][1,\ 3](00)、[1, 4][1,\ 4](00)、[2, 2][2,\ 2](00)、[4, 4][4,\ 4](00),总和为 22。

在第三个样例中,由题设可知,所有操作执行完毕后,SS = "abcde",W=[7,2,10,1,7]W = [7, 2, 10, 1, 7]。

  1. SS = "a",可疑子区间:[1, 1][1,\ 1](可疑度 77),总和为 77。

  2. SS = "ab",可疑子区间:[1, 1][1,\ 1](77)、[1, 2][1,\ 2](22),总和为 99。

  3. SS = "abc",可疑子区间:[1, 1][1,\ 1](77)、[1, 2][1,\ 2](22)、[1, 3][1,\ 3](22),总和为 1111。

  4. SS = "abcd",可疑子区间:[1, 1][1,\ 1](77)、[1, 2][1,\ 2](22)、[1, 3][1,\ 3](22)、[1, 4][1,\ 4](11),总和为 1212。

  5. SS = "abcde",可疑子区间:[1, 1][1,\ 1](77)、[1, 2][1,\ 2](22)、[1, 3][1,\ 3](22)、[1, 4][1,\ 4](11)、[1, 5][1,\ 5](11),总和为 1313。

输入解题思路,AI测评打分。不知道怎么写?

首页