比赛 20160415x 评测结果 AAAAAAAAAAAAAAAATTTA
题目名称 数字查询 最终得分 85
用户昵称 前鬼后鬼的守护 运行时间 18.571 s
代码语言 C++ 内存使用 0.93 MiB
提交时间 2016-04-15 16:12:34
显示代码纯文本
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
#define FILE "numquery"
using std::sort;
typedef long long ll;
typedef double lf;
typedef unsigned short u16;
namespace IO{
	char buf[1<<15],*fs,*ft;
	inline char getc(){return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
	inline int read(){
		int x=0,rev=0,ch=getc();
		while(ch<'0'||ch>'9'){if(ch=='-')rev=1;ch=getc();}
		while(ch>='0'&&ch<='9'){x=(x<<1)+(x<<3)+ch-'0';ch=getc();}
		return rev?-x:x;
	}
}using namespace IO;
const int MAXN(40000),D(5),INF(1<<30);
int n,m,maxrank;
struct Data{
	int val,rank,ID;
}a[MAXN+D];
inline bool operator<(const Data& a,const Data& b){return a.val<b.val;}
inline bool cmp(const Data& a,const Data& b){return a.ID<b.ID;}
void init(){
	n=read(),m=read();
	for(int i=0;i<n;i++)
		a[i].val=read(),a[i].ID=i;
	sort(a,a+n);
	a[0].rank=1;
	for(int i=1,pos=1;i<n;i++)
		a[i].rank=(a[i].val==a[i-1].val?pos:++pos);
	maxrank=a[n-1].rank;
	sort(a,a+n,cmp);
}
int cnt[MAXN+D];
int maxx,num;
void work(){
	for(int Case=1,last=0;Case<=m;Case++){
		int l=(read()+last-1)%n,r=(read()+last-1)%n;
		if(l>r)l^=r^=l^=r;
		memset(cnt+1,0,sizeof(int)*maxrank);
		maxx=num=0;
		for(int i=l;i<=r;i++){
			int k=a[i].rank;
			if((++cnt[k])>maxx||(cnt[k]==maxx&&a[i].val<num))
				maxx=cnt[k],num=a[i].val;
		}
		printf("%d\n",last=num);
	}
}
int main(){
	freopen(FILE".in","r",stdin);
	freopen(FILE".out","w",stdout);
	init();
	work();
	return 0;
}