[TJOI2018] 数学计算
Posted darthvictor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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
",tr[1]);
}
}
return 0;
}
幸甚至哉,歌以咏志。
以上是关于[TJOI2018] 数学计算的主要内容,如果未能解决你的问题,请参考以下文章