求助啊
查看原帖
求助啊
151647
sycqwq楼主2020/8/28 09:18

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;
}
2020/8/28 09:18
加载中...