Jzoj3547 MEX
来源:互联网 发布:普通话测试模拟软件 编辑:程序博客网 时间:2024/06/16 02:09
有一个长度为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 1000000000using 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));}}
阅读全文
1 0
- Jzoj3547 MEX
- mex
- Mex
- mex
- mex
- MEX文件
- 关于MEX
- Matlab MEX
- E - Mex
- matlab mex
- bzoj3585: mex
- Mex 文件
- 【BZOJ3585】mex
- [bzoj3585]mex
- 数组Mex
- matlab+mex
- 数组Mex
- bzoj3585 mex
- HDU 1242-Rescue
- php培训学习记录 第三天(开始记录)
- web常见错误
- 三维空间透视投影至二维平面
- hdu 1069(dp)
- Jzoj3547 MEX
- define、enum、const
- WPS Office for Linux即将面临开源
- 51Nod 1355 斐波那契的最小公倍数
- 【优先队列】百度2018校招编程题—序列合并
- 1092: 并查集模版
- 提取NTLDR文件,分解Osloader.exe;pe文件找e_lfanew、IMAGE_EXPORT_DIRECTORY->AddressOfFunctions
- Linux系统命令及基本操作
- Linux命令分析:df