真的字符串
题号:NC15050
时间限制:C/C++/Rust/Pascal 2秒,其他语言4秒
空间限制:C/C++/Rust/Pascal 256 M,其他语言512 M
64bit IO Format: %lld

题目描述

给你一个字符串init,要求你支持三个操作

1.在当前字符串的后面插入若干个字符

2.在当前字符串的后面删除若干个字符

3.询问字符串s在当前字符串中出现了几次?(作为连续子串)

你必须在线支持这些操作

输入描述:

第一行一个数Q表示操作个数
第二行一个字符串表示初始字符串init
接下来Q行,每行:
ADD str表示在后面插入str这个字符串
DEL x表示在后面删除x个字符
QUERY str表示询问str在当前字符串中出现了几次。
为了体现在线操作,你需要维护一个变量mask,初始值为0
读入串str之后,
使用这个过程将之解码成真正询问的串TrueStr
询问的时候,对TrueStr询问后输出一行答案Result
然后mask = mask xor Result
插入的时候,将TrueStr插到当前字符串后面即可。
ADD和QUERY操作的字符串都需要解压

输出描述:

对于每个询问,输出一行一个数表示答案
示例1

输入

复制
3
A
QUERY B
ADD BBABBBBAAB
DEL 1

输出

复制
0

备注:

对于100%的数据,
字符集为大写字母
数据字符串变化长度以及初始长度和<= 800000,询问次数<= 100000,询问总长度<= 3000000