C++ 代码
#include<cstdio>
#include<unordered_map>
using namespace std;
typedef long long LL;
const int N=100010;
struct Node{
int l,r;
LL v;
}tr[N*4];
int n,mod;
unordered_map<int,int>key;
void pushup(int u){
tr[u].v=(tr[u<<1].v*tr[u<<1|1].v)%mod;
}
void build(int u,int l,int r){
tr[u]={l,r,1};
if(l==r)return;
int mid=l+r>>1;
build(u<<1,l,mid);
build(u<<1|1,mid+1,r);
}
void modify(int u,int pos,LL x){
if(tr[u].l==pos&&tr[u].r==pos){tr[u].v=x;return;}
int mid=tr[u].l+tr[u].r>>1;
if(pos<=mid)modify(u<<1,pos,x);
else modify(u<<1|1,pos,x);
pushup(u);
}
void query(){
printf("%d\n",tr[1].v%mod);
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d%d",&n,&mod);
key.clear();
int op,m,cnt=0;
build(1,1,n);
for(int i=1;i<=n;i++){
scanf("%d%d",&op,&m);
if(op==1){key[i]=++cnt;modify(1,cnt,m);}
else modify(1,key[m],1);
query();
}
}
return 0;
}