吹不动蒲公英
查看原帖
吹不动蒲公英
180103
Ew_Cors楼主2022/10/2 20:04

RT,不知道是什么原因只过了三个点涅,剩余都是 WA,时间很宽裕!

代码如下:

#include<bits/stdc++.h>
using namespace std;

int n,m,a[40005],b[40005];

int l[205],r[205],cob,lob;
int s[205][40005],c[205][205];

int tmp[40005];

int main(){
	
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		cin>>a[i];
		b[i]=a[i];
	}
	sort(b+1,b+n+1);
	int ctmp=unique(b+1,b+n+1)-b-1;
	for(int i=1;i<=n;i++)
		a[i]=lower_bound(b+1,b+ctmp+1,a[i])-b;
	
	lob=floor(sqrt(n));
	for(;r[cob]<n;cob++)
		l[cob+1]=cob*lob+1,
		r[cob+1]=(cob+1)*lob;
	cob--;
	r[cob]=n;
	
	for(int i=1;i<=cob;i++){
		for(int j=1;j<=n;j++)
			s[i][j]=s[i-1][j];
		for(int j=l[i];j<=r[i];j++)
			s[i][a[j]]++;
	}
	
	for(int i=1;i<=cob;i++){
		int id=0;
		for(int j=i;j<=cob;j++){
			for(int k=l[j];k<=r[j];k++){
				tmp[a[k]]++;
				if(tmp[a[k]]>tmp[id]
				||(tmp[a[k]]==tmp[id] && a[k]<id))
				  	id=a[k];
			}
			c[i][j]=id;
		}
		memset(tmp,0,sizeof tmp);
	}
	
	for(int i=1,L,R,lst=0;i<=m;i++){
		cin>>L>>R;
		L=(L-1+lst)%n+1,R=(R-1+lst)%n+1;
		if(L>R)swap(L,R);
		
		int lb=(L-1)/lob+1,rb=(R-1)/lob+1;
		
		int id=0;
		
		if(rb-lb<=1){
			for(int k=L;k<=R;k++){
				tmp[a[k]]++;
				if(tmp[a[k]]>tmp[id]
				||(tmp[a[k]]==tmp[id] && a[k]<id))
				  	id=a[k];
			}
			for(int k=L;k<=R;k++)
				tmp[a[k]]=0;
		}
		else{
			for(int k=L;k<=r[lb];k++){
                if(!tmp[a[k]])
                    tmp[a[k]]=s[rb-1][a[k]]-s[lb][a[k]];
				tmp[a[k]]++;
				if(tmp[a[k]]>tmp[id]
				||(tmp[a[k]]==tmp[id] && a[k]<id))
				  	id=a[k];
			}
			for(int k=l[rb];k<=R;k++){
                if(!tmp[a[k]])
                    tmp[a[k]]=s[rb-1][a[k]]-s[lb][a[k]];
				tmp[a[k]]++;
				if(tmp[a[k]]>tmp[id]
				||(tmp[a[k]]==tmp[id] && a[k]<id))
				  	id=a[k];
			}
			
            int clr=c[lb+1][rb-1];
            if(!tmp[clr])tmp[clr]=s[rb-1][clr]-s[lb][clr];
            if(tmp[clr]>tmp[id]
			||(tmp[clr]==tmp[id] && clr<id))
			  	id=clr;
            
            tmp[clr]=0;
            for(int k=L;k<=r[lb];k++)
                tmp[a[k]]=0;
            for(int k=l[rb];k<=R;k++)
                tmp[a[k]]=0;
		}
		
		cout<<(lst=b[id])<<endl;
	}
	return 0;
}
2022/10/2 20:04
加载中...