其他分享
首页 > 其他分享> > [TJOI2018] 数学计算

[TJOI2018] 数学计算

作者:互联网

题目

原题地址

解说

每次操作看成一个点,用线段树维护区间的积,没什么可说的。

代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int Q=1e5+5;
inline ll read(){
    ll X=0,w=0;char ch=0;
    while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
    while(isdigit(ch))X=(X<<3)+(X<<1)+(ch^48),ch=getchar();
    return w?-X:X;
}
int q;
ll p,tr[Q*4];
inline void upt(int a){tr[a]=tr[a<<1]*tr[a<<1|1]%p;}
void build(int a,int l,int r){
    if(l==r){
    tr[a]=1;return;
    }
    int mid=(l+r)>>1;
    build(a<<1,l,mid);build(a<<1|1,mid+1,r);
    upt(a);
}
void mdy(int a,int l,int r,int x,ll y){
    if(l==r){
    tr[a]=y;
    return;
    }
    int mid=(l+r)>>1;
    if(x<=mid)mdy(a<<1,l,mid,x,y);
    else mdy(a<<1|1,mid+1,r,x,y);
    upt(a);
}
int main(){
    int T=read();
    while(T--){
          q=read(),p=read();
          build(1,1,q);
          for(int i=1;i<=q;i++){
              int op=read();
              if(op==1){
                  ll m=read();
                  mdy(1,1,q,i,m);
              }
              else{
                  int pos=read();
                  mdy(1,1,q,pos,1);
              }
              printf("%lld\n",tr[1]);
          }
    }
    return 0;
}

幸甚至哉,歌以咏志。

标签:ch,ll,long,咏志,while,isdigit,数学计算,TJOI2018
来源: https://www.cnblogs.com/DarthVictor/p/12976031.html