高精+模拟显然会TLE的(多项式爬
很容易想到一个naive的想法:逆元+模拟。
但是题目不保证互质。
我误解了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;
}