比赛 |
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;
}