高精+模拟显然会TLE的(多项式爬
很容易想到一个naive的想法:逆元+模拟。
但是题目不保证互质。
P4588 [TJOI2018]数学计算_i++
我误解了Krydom PPT的内容因而发了个帖。(%%%IOI选手)
好吧,数学方面失败()
但是我们发现,每一个除法相当于把乘的变成了1,而查询相当于查询所有乘数的积。

这是什么?单点修改,区间查询!树状数组或线段树可以实现。
这里使用了线段树。

#include<bits/stdc++.h>
using namespace std;
int mod;
const int maxn=1e5+5;
long long xds[maxn<<2];
int q;
void pushup(int k){
	xds[k]=xds[k<<1]%mod*xds[k<<1|1]%mod;
}
void modify(int k,int l,int r,int x,int y){
	if(l==r){
		xds[k]=y;
		return ;
	}
	int mid=l+r>>1;
	if(x<=mid)modify(k<<1,l,mid,x,y);
	else modify(k<<1|1,mid+1,r,x,y);
	pushup(k);
}
int main(){
    int T;
    cin>>T;
    while(T--){
	for(int i=0;i<(maxn<<2);i++)xds[i]=1;
	cin>>q>>mod;
	for(int i=1;i<=q;i++){
		int ch,k;
		cin>>ch>>k;
		if(ch==1){
			modify(1,1,q,i,k);
		}
		if(ch==2){
			modify(1,1,q,k,1);
		}
		cout<<xds[1]%mod<<endl;
	}
    }
	return 0;
}