社区讨论
样例全0求调
P4588[TJOI2018] 数学计算参与者 3已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @mm4vytjk
- 此快照首次捕获于
- 2026/02/27 20:46 2 周前
- 此快照最后确认于
- 2026/03/01 17:30 上周
CPP
#include <bits/stdc++.h>
#define Rainbow return
#define after 0
#define rain
using namespace std;
long long t,q,m;
struct nd{
long long l,r,mul;
}sgt[400010];
void upd(int q,int x,int p){
if(sgt[p].l==q&&sgt[p].r==q){
sgt[p].mul=x;
return;
}
if(sgt[p].l==sgt[p].r) return ;
int l=sgt[p].l,r=sgt[p].r;
int mid=(l+r)/2;
if(q<=mid) upd(q,x,p*2);
else upd(q,x,p*2+1);
sgt[p].mul=sgt[p*2].mul*sgt[p*2+1].mul;
sgt[p].mul%=m;
}
long long qry(int ql,int qr,int p){
int l=sgt[p].l,r=sgt[p].r;
if(ql>=l&&qr<=r) return sgt[p].mul;
if(ql>r||qr<l) return 1;
long long tmp=qry(ql,qr,p*2)*qry(ql,qr,p*2+1);
return tmp%m;
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
//freopen(".in","r",stdin);
//freopen(".out","w",stdout);
cin>>t;
while(t--){
cin>>q>>m;
sgt[1]={1,q,1};
for(int i=1;i<=q;i++){
int op,x;
cin>>op>>x;
if(op==1){
upd(i,x,1);
cout<<qry(1,i,1)<<"\n";
}
if(op==2){
upd(x,1,1);
upd(i,1,1);
cout<<qry(1,i,1)<<"\n";
}
}
}
Rainbow after rain;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...