【FZU-2297】Number theory

伪装成求逆元的线段树题目…

#include<iostream>
#define rep(i,n) for(int i=1;i<=n;i++)
#define ls i<<1
#define mid (l+r)/2
using namespace std;

const int N=200005;
int n,m,t,L,R,pos,x,c[N*4];
char ch;

void update(int i=1,int l=1,int r=n) {
    if(l==r) {
        c[i]*=x,c[i]%=m;
        if(x==-1) c[i]=1;
        return ;
    }
    if(mid>=pos) update(ls,l,mid);
    else update(ls|1,mid+1,r);
    c[i]=c[ls]*c[ls|1]%m;
}

void solve(int ans=1) {
    cin>>n>>m;
    rep(i,4*n) c[i]=1;
    rep(i,n) {
        cin>>ch>>t;
        if(ch=='M') pos=i,x=t,update();
        else pos=t,x=-1,update();
        cout<<c[1]<<'\n';
    }
}

int main() {
    ios::sync_with_stdio(false);
    int T;cin>>T;
    while(T--) solve();
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值