http://www.elijahqi.win/2017/09/24/bzoj3585-mex/
Description
  有一个长度为n的数组{a1,a2,…,an}。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

数据规模和约定

  对于100%的数据:

  1<=n,m<=200000

  0<=ai<=109

  1<=l<=r<=n

  对于30%的数据:

  1<=n,m<=1000

Source
By 佚名提供
似乎现在常数小一点点了qwq但仍然被zhx巨佬的小常数虐废
首先我可以o(n) 求出1~n的mex值 那么考虑我如果向右挪动一位 那么我这一位i上的值可以用了 怎么办 我就说明我i~next[i]-1都可以使用 a[i]这个值了 那么就线段树区间修改即可 然后单点查询最小值 注意 一开始所有节点给inf…另外这题需要离散化一下..坑

#include<cstdio>
#include<algorithm>
#define N 220000
#define inf 0x3f3f3f3f
using namespace std;
inline char gc(){static char now[1<<16],*S,*T;if (T==S){T=(S=now)+fread(now,1,1<<16,stdin);if (T==S) return EOF;}return *S++;
}
inline int read(){int x=0,f=1;char ch=gc();while(ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=gc();}while(ch<='9'&&ch>='0') x=x*10+ch-'0',ch=gc();return x*f;
}
int n,m,a[N],num,b[N],c[N],last[N],next[N],mex[N],ans[N],root;bool flag[N];
struct node{int left,right,min;
}tree[N<<1];
inline void build(int &x,int l,int r){x=++num;tree[x].min=inf;if (l==r){tree[x].min=mex[l];return;}int mid=l+r>>1;build(tree[x].left,l,mid);build(tree[x].right,mid+1,r);
}
inline void change(int x,int l,int r,int l1,int r1,int v){if (l1<=l&&r1>=r) {tree[x].min=min(tree[x].min,v);return;}int mid=l+r>>1;if (l1<=mid) change(tree[x].left,l,mid,l1,r1,v);if (r1>mid) change(tree[x].right,mid+1,r,l1,r1,v);
}
struct node1{int l,r,id;
}qr[N];
inline bool cmp(const node1 &a,const node1 &b){return a.l<b.l;}
inline void pushdown(int x){int l=tree[x].left,r=tree[x].right;tree[l].min=min(tree[l].min,tree[x].min);tree[r].min=min(tree[r].min,tree[x].min);
}
inline int query(int x,int l,int r,int p){if (l==r) return tree[x].min;pushdown(x);int mid=l+r>>1;if (p<=mid) return query(tree[x].left,l,mid,p);else return query(tree[x].right,mid+1,r,p);
}
int main(){freopen("4137.in","r",stdin);n=read();m=read();for (int i=1;i<=n;++i) a[i]=read(),b[i]=a[i];sort(b+1,b+n+1);int nn=unique(b+1,b+n+1)-b-1;for (int i=1;i<=n;++i) c[i]=lower_bound(b+1,b+nn+1,a[i])-b,last[i]=n+1;for (int i=n;i;--i) next[i]=last[c[i]],last[c[i]]=i;int now=0;for (int i=1;i<=n;++i){if (a[i]<N) flag[a[i]]=1;while(flag[now]) ++now;mex[i]=now;}for (int i=1;i<=m;++i) qr[i].l=read(),qr[i].r=read(),qr[i].id=i;build(root,1,n);sort(qr+1,qr+m+1,cmp);now=1;for (int i=1;i<=m;++i){while(now<qr[i].l) change(root,1,n,now,next[now]-1,a[now]),++now;ans[qr[i].id]=query(root,1,n,qr[i].r);}for (int i=1;i<=m;++i) printf("%d\n",ans[i]);return 0;
}

bzoj3585 mex相关推荐

  1. 【莫队算法】【权值分块】bzoj3585 mex

    orz PoPoQQQ. 本来蒟蒻以为这种离散化以后就对应不起来的题不能权值分块搞的说. --结果,实际上>n的权值不会对答案作出贡献. #include<cstdio> #incl ...

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

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

  3. 构造 ---- 最小没出现过的数(逆向构造) D. Replace by MEX

    题目链接 题目大意: 给你一个aaa序列长度为nnn,每次挑选一个位置pos∈[1,n]pos\in[1,n]pos∈[1,n],把apos=MEX(a)a_{pos}=MEX(a)apos​=MEX ...

  4. [模板] 区间mex 区间元素种数

    区间mex 问题 给定序列\({a_i}\), 每次询问给出\(l\), \(r\), 询问 \(\text{mex} \{a_i\}, i \in \{l, l+1, \cdots r\}\) 解法 ...

  5. 使用matlab进行mex编译时的路径问题mexopts

    matlab和vs 进行混合编程时总须要使用matlab编译mexFunction.cpp文件. 这些文件免不了使用include下的*.h和lib下的*.lib文件.举例说明.这次我的cpp中用到了 ...

  6. “Matlab R2016a中运行‘mex -setup’,错误使用 mex 未找到支持的编译器或 SDK”的解决办法

    目录 问题描述: 原因分析: 解决方案: 1.失败经验 2.成功方法 (1)下载MinGW-w64 C/C++ 编译器 (2)安装MinGW-w64 C/C++ 编译器 (3)设置为系统环境变量 (4 ...

  7. cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件

    cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排 cmake 编译工程具有独特的优势 ...

  8. matlab编译错误怎么查找,matlab - Matlab mex文件编译错误-“未启用SSE2指令集” - 堆栈内存溢出...

    在Matlab中编译mex文件的工具箱时,出现以下错误: In file included from /home/josh/Desktop/Project/code/toolbox/channels/ ...

  9. matlab和C/C++混合编程--Mex

    最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...

最新文章

  1. android消除app卡顿,为什么你的app会出现卡顿?Android开发:关于性能需要考虑的...
  2. netty 之 telnet HelloWorld 详解
  3. python 条形图_Python数据可视化:基于matplotlib绘制「堆积条形图」
  4. 读jQuery之十二(删除事件核心方法)
  5. python关闭exe程序_Win 10 中使用 Python 碰到的奇怪现象
  6. 吴恩达深度学习1.3笔记_Neural Networks and Deep Learning_浅层神经网络
  7. 将稍大文件存储到远程SQL Server服务器
  8. AttributeError:type object ‘TFLiteConverterV2 ‘has no attribute ‘form_keras_model_file ‘
  9. 【CS285 深度强化学习 】作业一之详解 [Deep Reinforcement Learning]
  10. Centeros常用命令
  11. 常用Firefox插件大全
  12. 安全防范知识点 -- CSRF
  13. angular 万年历_世界豪华手表
  14. 基于python语言设计的词云定制器
  15. 你看这雪花如此的美丽
  16. 使用两种方式,Android 发送文件到指定邮箱(带多个附件)
  17. 畅想未来计算机英语作文带翻译,“未来畅想”英语作文带翻译
  18. Aspect @Pointcut切入点解释
  19. 将灰度图像变换到0-1的灰度范围
  20. 迅捷电子相册快速生成视频的方法--win10专业版

热门文章

  1. 个人怎样注册公司,注册公司流程是什么?
  2. linux 查看大文件,Linux 查看大文件内容的方法
  3. 软件测试思想者 - “中华公网共图强”观后感
  4. [鲁林希] 学习动力篇
  5. Tushare介绍、安装及快速入门
  6. c语言程序设计讲义,《C语言程序设计》案例讲义 - 完整版
  7. Android 应用程序未安装问题
  8. 丢人!35岁软件工程师:因涉嫌欺诈150万美元抗疫贷款被捕
  9. Go语言实现的API-Gateway
  10. 射影几何 -- 平面射影几何 1