Written with StackEdit.

题目描述

有一个长度为\(n\)的数组\({a_1,a_2,...,a_n}\)。\(m\)次询问,每次询问一个区间内最小没有出现过的自然数。

Input

第一行\(n,m\)。
第二行为\(n\)个数。
从第三行开始,每行一个询问\(l,r\)。

Output

一行一个数,表示每个询问的答案。

Sample Input

5 5
2 1 0 2 1
3 3
2 3
2 4
1 2
3 5

Sample Output

1
2
3
0
3

HINT

对于\(30\%\)的数据:
\(1<=n,m<=1000.\)

对于\(100\%\)的数据:
\(1<=n,m<=200000,0<=ai<=10^9,1<=l<=r<=n.\)

Solution

  • 多个区间询问,可以离线,并且可以\(O(1)\)转移,考虑使用莫队.
  • 但是\(a_i\leq 10^9\),直接开个\(cnt\)数组记录当前区间内的各种个数似乎不可做?
  • 然而,对于大于\(n\)的元素,我们可以直接无视它.
  • 一方面,它一定不会成为答案,否则需要出现至少\(0\)~\(n\) 这\(n+1\)个数.
  • 另一方面,它肯定不会对答案做出贡献.否则答案也会大于\(n\),据上,不可能.
  • 所以\(a_i\)的范围只是虚张声势...我们处理时将大于\(n\)的数都视作\(n+1\)即可.
  • 然后就是一个愉快的莫队板子题了.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{int out=0,fh=1;char jp=getchar();while ((jp>'9'||jp<'0')&&jp!='-')jp=getchar();if (jp=='-'){fh=-1;jp=getchar();}while (jp>='0'&&jp<='9'){out=out*10+jp-'0';jp=getchar();}return out*fh;
}
const int MAXN=2e5+10;
int cnt[MAXN];
set<int> s;
int Ans[MAXN];
int n,m;
int a[MAXN];
int belong[MAXN],BlockSize;
int L,R,res;
struct Query{int l,r;int id;bool operator < (const Query &rhs) const {if(belong[l]!=belong[rhs.l])return belong[l]<belong[rhs.l];return belong[r]<belong[rhs.r];}
}q[MAXN];
void BuildBlocks()
{BlockSize=sqrt(n);for(int i=1;i<=n;++i)belong[i]=(i/BlockSize)+1;
}
void add(int pos)
{++cnt[a[pos]];for(int i=res;i<=n+2;++i)if(cnt[i]==0){res=i;return;}
}
void remove(int pos)
{--cnt[a[pos]];if(cnt[a[pos]]==0)res=min(res,a[pos]);
}
int main()
{n=read(),m=read();for(int i=1;i<=n;++i)a[i]=read(),a[i]=a[i]>n?n+1:a[i];for(int i=1;i<=m;++i){q[i].id=i;q[i].l=read();q[i].r=read();      }for(int i=0;i<=n;++i)s.insert(i);a[0]=n+2;BuildBlocks();sort(q+1,q+1+m);L=0,R=0;for(int i=1;i<=m;++i){int l=q[i].l,r=q[i].r;while(L<l)remove(L),++L;while(L>l)--L,add(L);while(R<r)++R,add(R);while(R>r)remove(R),--R;Ans[q[i].id]=res;}for(int i=1;i<=m;++i)printf("%d\n",Ans[i]);return 0;
}

转载于:https://www.cnblogs.com/jklover/p/10105545.html

bzoj 3585 mex相关推荐

  1. BZOJ 3585: mex( 离线 + 线段树 )

    离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...

  2. 【BZOJ】3339: Rmq Problem 3585: mex(线段树+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3585 好神的题. 但是!!!!!!!!!!!!!!我线段树现在要开8倍空间才能过!!!!!!!!!! ...

  3. 【BZOJ 3339 / BZOJ 3585 / luogu 4137】Rmq Problem / mex

    [原题题面]传送门 [题解大意] 都说了是莫队练习题. 考虑已知[l,r]区间的mex值时,如何求[l+1,r]的mex值. 比较a[l+1]与已知ans的大小,如果a[l+1]>ans或者a[ ...

  4. 【bzoj 3339】Rmq Problem 【bzoj 3585】mex(可持久化线段树)

    传送门biu~biu~ 两道题区别只在于ai的范围,显然>=n的那些ai都是没有意义的,因此两题相同. 权值线段树上的i点记录数字i的最右出现位置,查询区间[l,r]即为查询第r棵线段树上最小的 ...

  5. poi word转html 根号,根号算法 - 作业部落 Cmd Markdown 编辑阅读器

    根号算法 --如何让复杂度去掉维 数据结构 算法 By 分块 一般分块 板子&原理 SIZ=(int)sqrt(n);//块大小 for(inti=(x-1)*SIZ+1;i<=x*SI ...

  6. 一句话题解(20180210~)

    2.9 BZOJ 2006 [NOI2010]超级钢琴.这道题目几天之前就做了.做法是固定右端点,左端点在ST表上走,走法其实就是笛卡尔树的走法.完结撒花! BZOJ 1218 [HNOI2003]激 ...

  7. [颓废史]蒟蒻的刷题记录

    QAQ蒟蒻一枚,其实我就是来提供水题库的. 以下记录从2016年开始. 1.1 1227: [SDOI2009]虔诚的墓主人 树状数组+离散化 3132: 上帝造题的七分钟 树状数组 二维区间加减+查 ...

  8. BZOJ 1022 [SHOI2008]小约翰的游戏John

    title: 'BZOJ 1022 [SHOI2008]小约翰的游戏John' categories: BZOJ date: 2016-3-8 21:27:00 tags: [SG函数,博弈论] De ...

  9. [BZOJ 4763]雪辉

    [BZOJ 4763] 雪辉 题意 给定一棵 \(n\) 个点的无根树, 点带权. \(q\) 次询问, 每次给定树上的若干路径, 求这些路径上的点共有多少种不同权值以及这些点的权值组成的集合的 \( ...

最新文章

  1. VMware workstation安装
  2. VC++ ipaddress控件的使用
  3. Kubernetes的yaml文件中的command使用
  4. iTerm2 隐藏用户名和主机名
  5. 互联网被滥用的沟通“话术”
  6. Intel Core Solo/Duo处理器架构/微架构/流水线 - 前端/数据预取/SSE3
  7. 【STM32】【STM32CubeMX】STM32CubeMX的使用之八:低功耗模式及MCU唤醒
  8. LinkedIn应用开发系列(三) --认证Request token
  9. ps技巧学习之常用8种抠图方法
  10. MySQL高可用之PXC详解
  11. matlab 逐日 变逐月,100多年的逐日数据在EXCEL里用VBA程序求月平均和月求和 - 信息科学 - 小木虫 - 学术 科研 互动社区...
  12. 产品经理职责技能和所需证书
  13. 未转变者服务器.id大全,Unturned未转变者Elver最新地图ID汇总 2021最新版ID大全[多图]...
  14. python中无法安装xpath库,Python爬虫 | xpath的安装
  15. html svg折线带圆角,SVG / d3.js上的矩形的一个角的圆角(svg / d3.js rounded corner
  16. COGS 2815. 天黑请闭眼
  17. CF1774C. Ice and Fire
  18. 【Alpha】Scrum Meeting 5
  19. 什么是混合移动App开发?
  20. Lenovo Thinkpad T400在BIOS中开启VT虚拟化后无法生效?

热门文章

  1. 前台为html后台是asp在vs2012中建立什么,Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得...
  2. Java常用设计模式————工厂模式
  3. android xml 设置图片,android 的几种图片效果xml写法
  4. json阅读器_Flutter小说阅读器系列一:使用Bloc模式获取起点小说关键字提示
  5. vue watch 修改滚动条_Vue 里的 computed 和 watch 的区别
  6. 如何用php写表单中的年月日,php写的日历程序 - adamboy的个人页面 - OSCHINA - 中文开源技术交流社区...
  7. 利用trunk实现vlan内通信_实现不同VLAN间通信——单臂路由
  8. java国际规范标准,国际化 - Java Servlet 3.1 规范
  9. Java中implies_boolean implies(Permission p)
  10. 光耦驱动单向可控硅_光耦继电器在实际应用中的作用以及工作原理!!