请求加强数据QAQ
查看原帖
请求加强数据QAQ
223797
Remake_楼主2020/12/3 12:05

Rt,我一发卡常分块在不吸氧的情况下擦着边过了

AC记录

#include<bits/stdc++.h>
using namespace std;
int T,q,mod,L[1005],R[1005],siz,pos[100005],now,opt,m,bel[100005];
long long a[100005],prod[1005],ans;
int main(){
	scanf("%d",&T);
	while(T--){
		scanf("%d%d",&q,&mod);
		siz=ceil(sqrt(q));
		now=0;
		for(int i=1;i<=siz;i++){
			L[i]=(i-1)*siz+1;
			R[i]=i*siz;
			prod[i]=1;
			for(int j=L[i];j<=R[i];j++){
				a[j]=1;
				bel[j]=i;
			}
		}
		for(int i=1;i<=q;i++){
			scanf("%d",&opt);
			if(opt==1){
				scanf("%d",pos+i);
				a[++now]=pos[i];
				prod[bel[now]]=(prod[bel[now]]*pos[i])%mod;
				pos[i]=now;
			}
			else{
				scanf("%d",pos+i);
				a[pos[pos[i]]]=1;
				prod[bel[pos[pos[i]]]]=1;
				for(int j=L[bel[pos[pos[i]]]];j<=R[bel[pos[pos[i]]]];j++)
					prod[bel[pos[pos[i]]]]=(prod[bel[pos[pos[i]]]]*a[j])%mod;
			}
			ans=1;
			for(int i=1;i<=bel[now];i++) ans=(ans*prod[i])%mod;
			printf("%d\n",ans);
		}
	}
}

或者说在标签里加上分块

2020/12/3 12:05
加载中...