提交时间:2025-10-08 15:25:25

运行 ID: 38459

#include<bits/stdc++.h> #define ll long long using namespace std; const int maxn=1e4+10; const ll inf=1e10; const ll mod=998244353; ll n,m; ll num[maxn],ans[maxn],tmp[maxn]; struct node{ int opt,x; }q[maxn]; int main(){ // freopen("xortree.in","r",stdin); // freopen("xortree.out","w",stdout); scanf("%lld%lld",&n,&m); memset(num,0,sizeof(num)); num[n]=1; memset(ans,0,sizeof(ans)); memset(tmp,0,sizeof(tmp)); for(int i=1;i<=m;i++){ scanf("%d%d",&q[i].opt,&q[i].x); } for(int i=1;i<=m;i++){ if(q[i].opt==2){ printf("%lld\n",(num[q[i].x]+ans[q[i].x])%mod); } else{ int x=q[i].x; for(int j=0;j<=8200;j++){ tmp[x^j]+=num[j]; tmp[x^j]%=mod; ans[x^j]+=num[j],ans[x^j]%=mod; } for(int j=0;j<=8200;j++){ //if(num[j]||tmp[j])cout<<j<<" "<<num[j]<<" "<<tmp[j]<<" "<<ans[j]<<endl; num[j]=(tmp[j]+num[j])%mod; tmp[j]=0; } } } fclose(stdin); fclose(stdout); return 0; }