比赛 20160415x 评测结果 AAAAAAATAATATTTTTTTA
题目名称 数字查询 最终得分 55
用户昵称 Satoshi 运行时间 29.906 s
代码语言 C++ 内存使用 1.06 MiB
提交时间 2016-04-15 16:33:58
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <map>
#define N 40010
using namespace std;
ifstream in("numquery.in");
ofstream out("numquery.out");
int n,q;
int s[N]={0};
map<int,int> F;
int C[N]={0};
int D[N]={0};
int m=0;
int tim[N]={0};
bool vis[N]={0};
int S[N]={0},top=0;
int INF=(1<<28);
void lisanhua()
{
	int i;
	for(i=1;i<=n;i++)C[i]=s[i];
	sort(C+1,C+n+1);
	for(i=1;i<n;i++)
	{
		if(C[i]==C[i+1])C[i]=-1;
	}
	for(i=1;i<=n;i++)if(C[i]!=-1)D[++m]=C[i];
	for(i=1;i<=m;i++)F[D[i]]=i;
	for(i=1;i<=n;i++)s[i]=F[s[i]];
}
inline int count(int l,int r)
{
	int i,num=INF,best=0;
	for(i=l;i<=r;i++)tim[s[i]]++;
	for(i=l;i<=r;i++)
	{
		if(tim[s[i]]>best)
		{
			best=tim[s[i]];
			num=s[i];
		}
		if(tim[s[i]]==best&&s[i]<num)num=s[i];
	}
	for(i=l;i<=r;i++)tim[s[i]]=0;
	return D[num];
}
void read()
{
	int i,l,r,x=0;
	in>>n>>q;
	for(i=1;i<=n;i++)in>>s[i];
	lisanhua();
	for(i=1;i<=q;i++)
	{
		in>>l>>r;
		l=(l+x-1)%n+1;
		r=(r+x-1)%n+1;
		if(l>r)swap(l,r);
		//out<<l<<' '<<r<<endl;
		x=count(l,r);
		out<<x<<endl;
	}
	/*for(i=1;i<=n;i++)out<<s[i]<<' ';
	out<<endl;*/
}
void work()
{
	
}
int main()
{
	read();
	work();
	return 0;
}