Jzoj3547 MEX
有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。
这是一个经典的主席树的题目,对于每个节点i开一颗线段树存储[1,i]区间内每个数最后出现的位置,那么查找的时候直接再树上类似平衡树找最小即可
#pragma GCC opitmize("O3")
#pragma G++ opitmize("O3")
#include<stdio.h>
#include<string.h>
#include<algorithm>
#define N 200010
#define M 1000000000
using namespace std;
struct tree{int l,r,v;
} s[N*50];
int rt[N],n,m,cnt=0;
void insert(int l,int r,int r1,int& r2,int k,int id){if(!r2) r2=++cnt;if(l==r){ s[r2].v=id; return; }int m=l+r>>1;if(k<=m){ s[r2].r=s[r1].r; insert(l,m,s[r1].l,s[r2].l,k,id); }else { s[r2].l=s[r1].l; insert(m+1,r,s[r1].r,s[r2].r,k,id); }s[r2].v=min(s[s[r2].l].v,s[s[r2].r].v);
}
int query(int l,int r,int r1,int k){if(s[r1].v>=k) return M;if(l==r) return l;int m=l+r>>1;if(s[s[r1].l].v<k) return query(l,m,s[r1].l,k);return query(m+1,r,s[r1].r,k);
}
int main(){scanf("%d%d",&n,&m);for(int x,i=1;i<=n;++i){scanf("%d",&x);insert(0,M,rt[i-1],rt[i],x,i);}for(int l,r;m--;){scanf("%d%d",&l,&r);printf("%d\n",query(0,M,rt[r],l));}
}
Jzoj3547 MEX相关推荐
- BZOJ 3585: mex( 离线 + 线段树 )
离线, 询问排序. 先处理出1~i的答案, 这样可以回答左端点为1的询问.完成后就用seq(1)将1到它下一次出现的位置前更新. 不断这样转移就OK了 ------------------------ ...
- 构造 ---- 最小没出现过的数(逆向构造) 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 ...
- [模板] 区间mex 区间元素种数
区间mex 问题 给定序列\({a_i}\), 每次询问给出\(l\), \(r\), 询问 \(\text{mex} \{a_i\}, i \in \{l, l+1, \cdots r\}\) 解法 ...
- 使用matlab进行mex编译时的路径问题mexopts
matlab和vs 进行混合编程时总须要使用matlab编译mexFunction.cpp文件. 这些文件免不了使用include下的*.h和lib下的*.lib文件.举例说明.这次我的cpp中用到了 ...
- “Matlab R2016a中运行‘mex -setup’,错误使用 mex 未找到支持的编译器或 SDK”的解决办法
目录 问题描述: 原因分析: 解决方案: 1.失败经验 2.成功方法 (1)下载MinGW-w64 C/C++ 编译器 (2)安装MinGW-w64 C/C++ 编译器 (3)设置为系统环境变量 (4 ...
- cmake重新编译matlab,ubuntu系统下cmake 编译matlab中mex文件
cmake 编译工程具有独特的优势,特别对于复杂的工程更是如此.利用matlab直接编译mex文件时,对于文件数据多的工程时,需要列举所有文件,并且要按照依赖关系排 cmake 编译工程具有独特的优势 ...
- matlab编译错误怎么查找,matlab - Matlab mex文件编译错误-“未启用SSE2指令集” - 堆栈内存溢出...
在Matlab中编译mex文件的工具箱时,出现以下错误: In file included from /home/josh/Desktop/Project/code/toolbox/channels/ ...
- matlab和C/C++混合编程--Mex
最近的项目需要matlab和C的混合编程,经过一番努力终于完成了项目要解决的问题.现在就将Mex的一些经验总结一下,当然只是刚刚开始,以后随着学习的深入继续添加.首先讲讲写Mex的一些常规规定,然后我 ...
- mex+matlab2013b+vs2012安装
要用到matlab vs混合编程... 原来的MATLAB2012b仅能支持到vs2010.这样使用 mex -setup会有问题的..找不到vs2012的编译器 好在2013b可以支持了.不用改啊改 ...
最新文章
- shell设置系统环境变量的问题
- 第一讲 IDLE使用
- 对学校的希望和寄语_南中医举行2020年开学典礼,校长胡刚寄语“后浪”:乘风破浪,扬帆起航...
- 5 华为兼容性 双指缩放_华为EMUI10“滚屏翻译”之背后的学问
- 双向广搜 8数码问题
- LAMP+Zabbix课程总结
- java akka actor性能_akka-http - 如何通过Akka HTTP(Java)与Akka Actor进行交互 - 堆栈内存溢出...
- C#程序加密工具.Net Reactor教程
- Ubuntu软件仓库管理
- SSM框架整合(以黑马程序员2022最新SSM框架教程P59为例)
- 数字孪生智慧医院:构建三维医疗看板可视化管理平台(四)
- 小米手机miui12系统下拉通知栏有通知但是看不到通知内容
- D盘需要管理员权限解决办法
- sir模型初始值_SIR模型简单了解(Susceptible Infected Recovered Model)
- 15分钟的html倒计时,js实现5分钟倒计时
- ModelWhale 云端运行 WRF 中尺度数值气象模式,随时随地即开即用的一体化工作流
- FFmpeg视频剪辑常用命令
- POJ1007 DNA Sorting中英对照翻译与参考解答
- 哪个牌子的蓝牙耳机音质好?公认音质最好的真无线耳机推荐
- 利用Office PPT录制演示视频