社区讨论

样例全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 条回复,欢迎继续交流。

正在加载回复...