比赛 20160415x 评测结果 AAAATTTTTTTTTTTTTTTT
题目名称 数字查询 最终得分 20
用户昵称 TZJerry 运行时间 33.251 s
代码语言 C++ 内存使用 0.77 MiB
提交时间 2016-04-15 15:49:18
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<iomanip>
#define maxn 40001
using namespace std;
int n,m,ans,l,r;
int a[maxn];
struct node {int name,times;} e[maxn];
int num;
void work(int l,int r)
{
	int num=0;
	int maxtime=0;
	int maxname=999999999;
	for(int i=l;i<=r;i++)
	{
		bool tt=false;
		for(int j=1;j<=num;j++)
		{
			if(e[j].name==a[i])
			{
				tt=true;
				e[j].times++;
				if(e[j].times>maxtime)
				{
					maxtime=e[j].times;
					maxname=e[j].name;
				}
				if(e[j].times==maxtime) maxname=min(e[j].name,maxname);
			}
		}
		if(tt==false)
		{
			num++;
			e[num].name=a[i];
			e[num].times=1;
			if(e[num].times>maxtime)
			{
				maxtime=e[num].times;
				maxname=e[num].name;
			}
			if(e[num].times==maxtime) maxname=min(e[num].name,maxname);
		}
	}
	ans=maxname;
	cout<<ans<<endl;
}
int main()
{
	freopen("numquery.in","r",stdin);
	freopen("numquery.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++) scanf("%d",&a[i]);
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d",&l,&r);
		l=(l+ans-1)%n+1;
		r=(r+ans-1)%n+1;
		if(r<l) swap(l,r);
		work(l,r);
	}
	return 0;
}