[bzoj3585] Rmq Problem / mex

bzoj luogu

上一篇博客吧,看完了这个也顺理成章会了(

(没错这篇博客就是这么水)

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=200011,SN=511;
template<typename tp>inline void read(tp &kk){
tp ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
kk=ret*f;
}
int n,m,bl[N],bs,a[N],mina;
int ar[N];
struct ques
{
int l,r,id;
bool operator < (const ques &a)const{return bl[l]==bl[a.l]?r<a.r:bl[l]<bl[a.l];}
void init(int i){id=i,read(l),read(r);}
}q[N]; struct ShangYang
{
int l[SN],r[SN],sz,buk[N],bukk[SN],b[N],bb;
void start()
{
sz=ceil(sqrt(mina));
for(int i=0;i<mina;i+=sz)
{
bb++;
l[bb]=i,r[bb]=min(mina-1,i+sz-1);
for(int j=l[bb];j<=r[bb];j++) b[j]=bb;
}
}
void add(int x)
{
if(x>=mina) return;
if(!buk[x]) bukk[b[x]]++;
buk[x]++;
}
void mus(int x)
{
if(x>=mina) return;
buk[x]--;
if(!buk[x]) bukk[b[x]]--;
}
int query()
{
for(int i=1;i<=bb;i++)
{
if(bukk[i]<r[i]-l[i]+1)
{
for(int j=l[i];j<=r[i];j++) if(!buk[j]) return j;
}
}
return mina;
}
void ot()
{
for(int i=0;i<mina;i++) printf("%d ",buk[i]);
putchar('\n');
for(int i=1;i<=bb;i++) printf("%d ",bukk[i]);
putchar('\n');
}
}sy;
int prt[N];
void icu()
{
sort(q+1,q+1+m);
int l=1,r=0;
for(int i=1;i<=m;i++)
{
// printf("%d %d %d\n",q[i].id,q[i].l,q[i].r);
while(r<q[i].r) sy.add(a[++r]);
while(l>q[i].l) sy.add(a[--l]);
while(r>q[i].r) sy.mus(a[r--]);
while(l<q[i].l) sy.mus(a[l++]);
// sy.ot();
prt[q[i].id]=sy.query();
}
} int main()
{
// freopen("testdata.in","r",stdin);
// freopen("996.out","w",stdout);
read(n),read(m);
bs=ceil(sqrt(n));
for(int i=1;i<=n;i++) read(a[i]),ar[i]=a[i],bl[i]=(i-1)/bs+1;
sort(ar+1,ar+1+n);
ar[0]=-1;
mina=ar[n]+1;
for(int i=1;i<=n;i++) if(ar[i]-ar[i-1]>1){mina=ar[i-1]+1;break;}
if(mina==0){for(int i=1;i<=m;i++) puts("0");return 0;}
for(int i=1;i<=m;i++) q[i].init(i);
sy.start();
icu();
for(int i=1;i<=m;i++) printf("%d\n",prt[i]);
return 0;
}

最新文章

  1. Nginx如何处理一个请求
  2. C语言 遍历流程 变量生命周期
  3. Microsoft开源跨平台的序列化库——Bond
  4. HTML5 十大新特性(十)——Web Socket
  5. Android之多线程断点下载
  6. Java多线程-新特征-阻塞队列ArrayBlockingQueue
  7. Excel导出问题(导出时不去掉前面的0)(转)
  8. Android进阶篇-时间滑动控件
  9. NOI2014 动物园
  10. Oralce生成前N年的年数据
  11. 解决liblzo2.so缺失
  12. Oracle存储过程和自定义函数
  13. C语言--第0周作业
  14. .net 获取时间十二进制与二十四进制
  15. Niagara帮助文档资料整理
  16. json格式字符串用Uncaught SyntaxError: Unexpected token &#39; Uncaught SyntaxError: Unexpected number
  17. 小白安装openvas总结-原创20181213
  18. pytorch visdom可视化工具学习—1—详细使用-1—基本使用函数
  19. Qt5 入门
  20. python自然语言处理函数库nltk从入门到精通

热门文章

  1. Solution -「SV 2020 Round I」SA
  2. mysql 清库
  3. 【C# 线程】转载 句柄的基本概念 .NET对象与Windows句柄
  4. 60天shell脚本计划-4/12-渐入佳境
  5. List、Set、Map有什么异同(详解)
  6. Chapter02 Java概述
  7. VirtualBox虚拟机-安装增强功能
  8. MM32F0140 GPIO驱动LED灯(MM32F0140 GPIO)
  9. MAC VMware配置Kali linux
  10. Docker安装与基本命令使用