TJOI 2018 数学计算

Posted 殇雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TJOI 2018 数学计算相关的知识,希望对你有一定的参考价值。

题链

 对时间建线段树,当然,你要写中国剩余定理我也是很资瓷。

#include<bits/stdc++.h>
#define LL long long
#define N 300007
#define sight(x) (‘0‘<=x&&x<=‘9‘)
#define Mid (l+r>>1)
#define Ls No<<1,l,Mid
#define Rs No<<1|1,Mid+1,r
using namespace std;
LL p[N];
int mo,T,x,op,q;
inline void read(int &x){
    static char c;
    for (c=getchar();!sight(c);c=getchar());
    for (x=0;sight(c);c=getchar())x=x*10+c-48;
}
void write(LL x){if (x<10) {putchar(0+x); return;} write(x/10); putchar(0+x%10);}
inline void writeln(LL x){ if (x<0) putchar(-),x*=-1; write(x); putchar(\n); }
inline void writel(LL x){ if (x<0) putchar(-),x*=-1; write(x); putchar( ); }
void change(int No,int l,int r,int id,int xx){
    if (l==r) {
        assert(id==l);
        p[No]=xx; return;
    }
    if (id<=Mid) change(Ls,id,xx);
    else change(Rs,id,xx);
    p[No]=p[No<<1]*p[No<<1|1]%mo;
}
void build(int No,int l,int r) {
    if (l==r) {
        p[No]=1; return;
    }
    build(Ls); build(Rs);
    p[No]=p[No<<1]*p[No<<1|1]%mo;
}
signed main () {
//    freopen("b.in","r",stdin);
    read(T);
    while (T--) {
        read(q); read(mo);
        build(1,1,q);
        for (int i=1;i<=q;i++) {
            read(op); read(x);
            if (op==1) change(1,1,q,i,x);
            else change(1,1,q,x,1);
            writeln(p[1]);
        }
    } return 0;
}

 

以上是关于TJOI 2018 数学计算的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ5334 [TJOI2018] 数学计算 线段树分治

bzoj 5334 [Tjoi2018]数学计算

TJOI 2018 数学计算

TJOI2018 数学计算

TJOI2018 数学计算

TJOI2018 数学计算