Rt.其实不是你谷的。
对不起标题党了,但是真的没人进。
P3823 蚯蚓排队 4pts code如下。
#include<bits/stdc++.h>
#define int long long
#define N 200010
#define MOD 998244353
using namespace std;
unordered_map<string,int> hs;
int n,m,K=50,a[N],op,aa,bb,bla,blb,beg,endd,ans,k,nxt[N],lst[N],sz[N],it[N];string s,tmp[N];
signed main(){
ios::sync_with_stdio(false);
cin.tie();cout.tie();
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>a[i],nxt[i]=lst[i]=0,hs[(tmp[0]+(char)(a[i]+'0'))]++,sz[i]=1;
for(int i=1;i<=m;i++){
cin>>op;
if(op==1){
cin>>aa>>bb;
for(int j=bb;j;j=nxt[j])
endd=j;
tmp[1]=(char)(a[bb]+'0');
for(int k=2,t=aa;k<=50;k++){
tmp[k]=tmp[k-1]+(char)(a[t]+'0');
it[k]=t;t=lst[t];
if(t==0)break;
}int j;
for(j=2;j<=50;j++){
reverse(tmp[j].begin(),tmp[j].end());
int t=it[j],bac=bb;
if(!t)break;
hs[tmp[j]]++;
if(hs[tmp[j]]>MOD)hs[tmp[j]]-=MOD;
if(bac!=endd)
while((t=nxt[t])){
bac=nxt[bac];
tmp[j].erase(tmp[j].begin());
tmp[j]+=(char)(a[bac]+'0');
hs[tmp[j]]++;
if(hs[tmp[j]]>MOD)hs[tmp[j]]-=MOD;
if(bac==endd)break;
}
}
for(;j<=50;j++){
if(nxt[it[j-1]]==0)break;
tmp[j]=tmp[j-1]+(char)(a[nxt[it[j-1]]]+'0');
hs[tmp[j]]++;
}
nxt[aa]=bb;lst[bb]=aa;
}
if(op==2){
cin>>aa;
bb=nxt[aa];
for(int j=bb;j;j=nxt[j])endd=j;
tmp[1]=(char)(a[bb]+'0');
int k,t,j;
for(k=2,t=aa;k<=50;k++){
tmp[k]=tmp[k-1]+(char)(a[t]+'0');
it[k]=t;t=lst[t];
if(t==0)break;
}nxt[aa]=lst[bb]=0;
for(j=2;j<=50;j++){
reverse(tmp[j].begin(),tmp[j].end());
int t=it[j],bac=bb;
if(!t){
break;
}
hs[tmp[j]]--;
if(bac!=endd)
while((t=nxt[t])){
bac=nxt[bac];
tmp[j].erase(tmp[j].begin());
tmp[j]+=(char)(a[bac]+'0');
hs[tmp[j]]--;
if(bac==endd)break;
}
}
for(;j<=50;j++){
if(nxt[it[j-1]]==0)break;
tmp[j]=tmp[j-1]+(char)(a[nxt[it[j-1]]]+'0');
hs[tmp[j]]--;
}
}
if(op==3){
cin>>s>>k;ans=1;
tmp[0]="";
for(int j=0;j<k;j++)
tmp[0]+=s[j];
ans*=hs[tmp[0]]%MOD;
for(unsigned int j=k;j<s.size();j++){
tmp[0].erase(tmp[0].begin());
tmp[0]+=s[j];
ans=ans*hs[tmp[0]]%MOD;
}
cout<<ans<<endl;
}
}
}
*/