bzoj#P4023. YDC的字符串

YDC的字符串

题目描述

YDC将给你 nn 个字符串,并要求进行 qq 次操作,每次操作形如一下四种:

  1. 在第 xx 个字符串后面加上一个字符 yy

  2. 询问在第 kk 个操作过后的第 yy 个字符串在当前的第 xx 个字符串中的出现次数。

  3. 将第 xx 个字符串改成第 yy 个字符串。

  4. 读入一个字符串,询问它在 nn 个串中每一个串中的出现次数。

这里的出现次数是特殊定义的,比如说询问串 s1s1s2s2 的出现次数,那么询问时会给出参数 l,rl,r,需要回答 s1s1 有多少子串形如 a+s2a+s2('++'号代表字符串连接),其中 aa 是一个字符集中在第 [l,r][l,r] 中的字符。不同的询问所给出的 l,rl,r 可能不同。

另外输入文件可能被加密。

输入格式

第一行三个整数数,n,m,tyn,m,ty,分别表示字符串个数,字符集大小,以及是否数据是否被加密,如果数据被加密,则 tyty 的值为 11,否则为 00

如果数据被加密,令 lastanslastans 为当前操作之前最后一个输出的数(如果此前没有输出则 lastans=0lastans=0)。那么当前操作中读入的所有数均被加密成了原数异或上 lastanslastans(即假设原数为 xx,你读入的数将是 xlastansx^lastans)。

接下来 nn 行,第 ii 行将给出第 ii 个字符串。字符串将按照如下格式给出:第一个数 lenlen 表示字符串的长度,接下来 lenlen 个整数,两两之间用空格隔开,表示每个位置上的字符是字符集中的第几个(从 00 开始标号)。

再读入一个数 qq,即操作数。

接着 qq 行,每行为一个操作的信息。每行第一个数为操作的类型。

如果是操作 00,那么接着两个整数 x,yx,y,含义如题所示。

如果是操作 11,那么接着五个整数 x,y,k,l,rx,y,k,l,r,其中 l,rl,r表示出现次数中所要求的 l,rl,r。(当 k=0k=0 时表示所有操作进行之前)。

如果是操作 22,那么接着两个整数 x,yx,y,含义如题所示。

如果是操作 33,那么接着两个整数 l,rl,r 和一个字符串 ss,字符串的格式和上述相同。

输出格式

对于每一个操作 1133,你都需要输出他们的答案。你需要确保你的输出顺序与读入顺序一致。

3 3 0
5 0 1 1 1 2
1 1
2 1 1
4
0 1 1
3 0 1 1 1
2 2 1
1 1 2 0 0 1
3 0 1
3

数据范围

对于 100%100\% 的数据,2n5,1m105,0q21052\le n\le 5,1\le m\le 10^5,0\le q\le 2*10^5

初始 nn 个串的总长度不超过 2105+202*10^5+20

操作 33 中读入的串总长度不超过 10610^6

保证数据合法。

保证任意时刻出现的 nn 个串均是一个长度不超过 41054*10^5 的字符串的子串。

对于前 3030% 的数据,保证 q1000q\le 1000,初始n个串的总长度不超过 1000+201000+20,操作 33 中读入的串总长度不超过 10410^4

对于前 6060% 的数据,保证所有的 l=0,r=m1l=0,r=m-1

对于前 8080% 的数据,保证数据没有被加密。