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