#include<cstdio>
#include<cstring>
using namespace std;
inline long long mul(long long x,long long y){return x*y-(long long)((long double)x*y/100000000000000003ll)*100000000000000003ll;}
inline void read(int &x)
{
x=0;
char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
}
int rt[51][1010000];
long long cc[210000][51];
struct node
{
long long c;
int cnt,next;
}tr[10010000];
int Q[10010000],head,tail;
inline int pop()
{
int re=Q[head];
if(head==10000000)head=1;
else head++;
return re;
}
inline void push(int c)
{
Q[tail]=c;
if(tail==10000000)tail=1;
else tail++;
}
void ins(int len,long long c)
{
int lst=-1;
for(int x=rt[len][c%1000000];x!=-1;x=tr[x].next)
{
if(tr[x].c==c){tr[x].cnt++;return ;}
lst=x;
}
int x=pop();
tr[x].c=c;
if(lst==-1)
{
rt[len][c%1000000]=x;
tr[x].cnt=1;
tr[x].next=-1;
}
else
{
tr[lst].next=x;
tr[x].cnt=1;
tr[x].next=-1;
}
}
void era(int len,long long c)
{
int lst=-1;
for(int x=rt[len][c%1000000];x!=-1;x=tr[x].next)
{
if(tr[x].c==c)
{
tr[x].cnt--;
if(tr[x].cnt==0)
{
if(lst==-1)rt[len][c%1000000]=-1;
else tr[lst].next=tr[x].next;
push(x);
}
break;
}
lst=x;
}
}
int fin(int len,long long c)
{
int s=0;
for(int x=rt[len][c%1000000];x!=-1;x=tr[x].next)if(tr[x].c==c)s+=tr[x].cnt;
return s;
}
struct Lian
{
int last,next;
}L[210000];
int a[210000];
char st[10010000];
int main()
{
int n,m;read(n);read(m);
memset(rt,-1,sizeof(rt));
head=1;tail=10000000;
for(int i=1;i<=10000000;i++)Q[i]=i;
for(int i=1;i<=n;i++)
{
read(a[i]);
cc[i][1]=a[i];
ins(1,a[i]);
L[i].last=L[i].next=-1;
}
for(int i=1;i<=m;i++)
{
int opt;read(opt);
if(opt==1)
{
int x,y;read(x);read(y);
L[x].next=y;L[y].last=x;
for(int j=1,X=x;j<50&&X!=-1;j++,X=L[X].last)
{
for(int k=1,Y=y;j+k<=50&&Y!=-1;k++,Y=L[Y].next)
{
cc[X][j+k]=(cc[X][j+k-1]*17+a[Y])%100000000000000003ll;
ins(j+k,cc[X][j+k]);
}
}
}
else if(opt==2)
{
int x;read(x);
int k=1;
for(int X=L[x].next;k<=50&&X!=-1;k++,X=L[X].next);
k--;
L[L[x].next].last=-1;
L[x].next=-1;
for(int j=1,X=x;j<50&&X!=-1;j++,X=L[X].last)
{
for(int kk=1;j+kk<=50&&kk<=k;kk++)era(j+kk,cc[X][j+kk]);
}
}
else if(opt==3)
{
scanf("%s",st+1);
int len=strlen(st+1);
int k;read(k);
long long c=0,g=1;
for(int kk=1;kk<=k;kk++)c=(c*17+st[kk]-'0')%100000000000000003ll;
for(int kk=1;kk<k;kk++)g=g*17%100000000000000003ll;
long long ss=fin(k,c);
for(int j=2;j+k-1<=len;j++)
{
c=((c-mul((st[j-1]-'0'),g)+100000000000000003ll)*17+st[j+k-1]-'0')%100000000000000003ll;
ss=ss*fin(k,c)%998244353;
}
printf("%lld\n",ss);
}
}
return 0;
}
Compilation | N/A | N/A | Compile OK | Score: N/A | 显示更多 |
Testcase #1 | 22.252 ms | 234 MB + 692 KB | Accepted | Score: 4 | 显示更多 |
Testcase #2 | 21.909 ms | 234 MB + 700 KB | Accepted | Score: 4 | 显示更多 |
Testcase #3 | 32.684 ms | 236 MB + 992 KB | Accepted | Score: 4 | 显示更多 |
Testcase #4 | 22.244 ms | 234 MB + 948 KB | Accepted | Score: 4 | 显示更多 |
Testcase #5 | 29.849 ms | 235 MB + 360 KB | Accepted | Score: 4 | 显示更多 |
Testcase #6 | 188.662 ms | 274 MB + 360 KB | Accepted | Score: 4 | 显示更多 |
Testcase #7 | 55.174 ms | 254 MB + 716 KB | Accepted | Score: 4 | 显示更多 |
Testcase #8 | 123.9 ms | 270 MB + 464 KB | Accepted | Score: 4 | 显示更多 |
Testcase #9 | 193.7 ms | 275 MB + 376 KB | Wrong Answer | Score: 0 | 显示更多 |
Testcase #10 | 218.284 ms | 271 MB + 524 KB | Accepted | Score: 4 | 显示更多 |
Testcase #11 | 368.914 ms | 281 MB + 484 KB | Wrong Answer | Score: 0 | 显示更多 |
Testcase #12 | 214.537 ms | 296 MB + 152 KB | Accepted | Score: 4 | 显示更多 |
Testcase #13 | 94.569 ms | 274 MB + 752 KB | Accepted | Score: 4 | 显示更多 |
Testcase #14 | 246.37 ms | 303 MB + 732 KB | Accepted | Score: 4 | 显示更多 |
Testcase #15 | 302.608 ms | 306 MB + 960 KB | Wrong Answer | Score: 0 | 显示更多 |
Testcase #16 | 458.538 ms | 306 MB + 180 KB | Accepted | Score: 4 | 显示更多 |
Testcase #17 | 633.777 ms | 315 MB + 464 KB | Wrong Answer | Score: 0 | 显示更多 |
Testcase #18 | 756.425 ms | 373 MB + 716 KB | Accepted | Score: 4 | 显示更多 |
Testcase #19 | 883.48 ms | 381 MB + 72 KB | Accepted | Score: 4 | 显示更多 |
Testcase #20 | 226.503 ms | 329 MB + 116 KB | Accepted | Score: 4 | 显示更多 |
Testcase #21 | 180.197 ms | 314 MB + 816 KB | Accepted | Score: 4 | 显示更多 |
Testcase #22 | 536.848 ms | 368 MB + 96 KB | Accepted | Score: 4 | 显示更多 |
Testcase #23 | 578.86 ms | 369 MB + 668 KB | Wrong Answer | Score: 0 | 显示更多 |
Testcase #24 | 1.003 s | 372 MB + 944 KB | Accepted | Score: 4 | 显示更多 |
Testcase #25 | 1.191 s | 381 MB + 316 KB | Wrong Answer | Score: 0 | 显示更多 |