rt
样例未过
莫名其妙输出很大的数
代码:
#include<bits/stdc++.h>
#define inf 2147283647
#define int unsigned long long
using namespace std;
const int maxn=1e5+5;
int sum[maxn<<2],m,t,q;
void build(int l,int r,int rt)
{
sum[rt]=1;
if(l==r)
{
return;
}
int mid=l+r>>1;
build(l,mid,rt<<1);
build(mid+1,r,rt<<1|1);
}
void update(int l,int r,int rt,int i,int k)
{
// cout<<2;/////////////////////
if(l==r)
{
sum[rt]=(k==0)?1:k;
return;
}
int mid=l+r>>1;
if(i<=mid)
update(l,mid,rt<<1,i,k);
else
update(mid+1,r,rt<<1|1,i,k);
// cout<<"ssssssssssssssssssssssssssssssssssssssss"<<k<<' '<<sum[1]<<endl;
// cout<<l<<' '<<r<<' '<<rt<<' '<<i<<' '<<k<<' '<<sum[1]<<' '<<sum[2]<<' '<<sum[3]<<endl;
sum[rt]=(sum[rt<<1]*sum[rt]<<1|1)%m;
}
signed main(){
cin>>t;
for(int i=1;i<=t;i++)
{
cin>>q>>m;
build(1,q,1);
for(int i=1;i<=q;i++)
{
int p,x;
cin>>p>>x;
if(p==1)
{
update(1,q,1,i,x);
cout<<sum[1]%m<<endl;
}
else
{
update(1,q,1,x,0);
cout<<sum[1]%m<<endl;
}
}
}
return 0;
}