这个,要处理各个数的话得先离散,我用的桶。

我们先把每个块里的和每个块区间的众数找出来,那么在查询的时候,可能成为[l,r]区间的众数的数只有中间区间的众数和两边的数。

证明:若不是这里的数连区间的众数都达不到。

我已开始把某个离散后的值当成了坐标,调了好久.......

#include<cstdio>
#include<cmath>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int b[],a[],n,m,lon,pos[],t,p[],back[],num[],f[][],sz;
int cmp(const int x,const int y)
{
if(b[x]<b[y])return ;
if(b[x]==b[y]&&x<y)return ;
return ;
}
vector<int> place[];
inline void do_it(int x)
{
memset(num,,sizeof(num));
int who=,how=;
for(int i=(x-)*lon+;i<=n;i++)
{
num[a[i]]++;
if(num[a[i]]>how||(num[a[i]]==how&&back[a[i]]<back[who]))
who=a[i],how=num[a[i]];
f[x][pos[i]]=who;
}
}
inline void Init()
{
scanf("%d%d",&n,&m);
lon=(int)sqrt(n+0.5);
for(int i=;i<=n;i++)
{
scanf("%d",&b[i]);
p[i]=i;
pos[i]=(i-)/lon+;
}
sort(p+,p+n+,cmp);
for(int i=;i<=n;i++)
{
if(b[p[i]]!=b[p[i-]])
{
a[p[i]]=++sz;
back[sz]=b[p[i]];
}
else
a[p[i]]=sz;
place[sz].push_back(p[i]);
}
t=pos[n];
for(int i=;i<=t;i++)do_it(i);
}
inline int query(int l,int r,int x)
{
return upper_bound(place[x].begin(),place[x].end(),r)-lower_bound(place[x].begin(),place[x].end(),l);
}
inline int Min(int x,int y){return x<y?x:y;}
inline int work(int l,int r)
{
int z=pos[l]+,y=pos[r]-;
int who=f[z][y],how=query(l,r,who);
int zzh=(z-)*lon;
zzh=Min(zzh,r);
for(int i=l;i<=zzh;i++)
{
int x=query(l,r,a[i]);
if(x>how||(x==how&&a[i]<who))
who=a[i],how=x;
}
if(pos[l]!=pos[r])
{
zzh=(y*lon)+;
for(int i=zzh;i<=r;i++)
{
int x=query(l,r,a[i]);
if(x>how||(x==how&&a[i]<who))
who=a[i],how=x;
}
}
return back[who];
}
int main()
{
Init();
int k=;
for(int i=;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
x=(x+k-)%n+;
y=(y+k-)%n+;
if(x>y)x^=y^=x^=y;
k=work(x,y);
printf("%d\n",k);
}
return ;
}

最新文章

  1. 打电话,发短信,发邮件,app跳转
  2. Cogs 14. [网络流24题] 搭配飞行员
  3. windows7-SQLyog 安装图解
  4. 终极事务处理(XTP,Hekaton)——万能大招?
  5. 注意 sizeof 中不要有复杂运算操作
  6. Xubuntu下Mentohust认证(校园网用户)
  7. Eclipse&amp;Spring开发开发环境配置
  8. android 使用 service 实现音乐
  9. vultr新用户注册享受50美元优惠码,长期有效
  10. Maven入门指南 :Maven 快速入门及简单使用
  11. 超赞的OOM检测(除了mat以外)
  12. 201521123022 《Java程序设计》 第二周学习总结
  13. dnsmasq服务的安装与配置
  14. C# bool.tryparse
  15. Hibernate基础一
  16. UNIX口令破解机
  17. Django Rest framework 之 序列化
  18. table-cell 布局
  19. app.use
  20. Coins in a Line I &amp; II

热门文章

  1. 商城项目:商品列表ajax加载,ajax加入购物车--五张表的联合查询
  2. Python基础02
  3. Python学习:for 循环 与 range()函数
  4. ruby 比较符号==, ===, eql?, equal?
  5. re模块(详解正则)
  6. 汇编实验14:访问CMOS RAM
  7. Android开发——View绘制过程源码解析(二)
  8. CentOS7 添加自定义系统服务案例
  9. NB-IOT的键值对
  10. Android 上能提高学习工作效率的应用