洛谷$P$4137 $Rmq\ Problem / mex$ 主席树
正解:主席树
解题报告:
本来以为是道入门无脑板子题,,,然后康了眼数据范围发现并没有我想像的那么简单昂$kk$
这时候看到$n$的范围不大,显然考虑离散化?但是又感觉似乎布星?因为询问的是最小没有出现昂$kk$
这时候考虑到答案显然要么是0要么是$a_{i}+1$?所以只用把$0,a_{i},a_{i}+1$离散化掉就成$QwQ$
然后就主席树板子了$QwQ$?开权值线段树存这个位置当前最后一次出现的位置,然后每次就是找最小的最后一次出现位置<l的数就成$QwQ$
$overrrrr$
对了,说一句,就记得数组要开大点儿,,,我数组开小了它也没有提醒我$RE$了而是跟我港$WA$了$QAQQQQQ$
#include<bits/stdc++.h>
using namespace std;
#define il inline
#define int long long
#define gc getchar()
#define ri register int
#define rc register char
#define rb register bool
#define rp(i,x,y) for(ri i=x;i<=y;++i)
#define my(i,x,y) for(ri i=x;i>=y;--i)
#define lb(x) lower_bound(st+1,st+1+sum,x)-st const int N=+;
int n,m,a[N],st[N],sum,rt[N],tr_cnt;
struct node{int mn,ls,rs;}tr[N<<]; il int read()
{
rc ch=gc;ri x=;rb y=;
while(ch!='-' && (ch>'' || ch<''))ch=gc;
if(ch=='-')ch=gc,y=;
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=gc;
return y?x:-x;
}
int insert(ri d,ri l,ri r,ri dat,ri pos)
{
ri nw=++tr_cnt;tr[nw]=tr[d];if(l==r)return tr[tr_cnt].mn=pos,tr_cnt;
ri mid=(l+r)>>;mid>=dat?tr[nw].ls=insert(tr[d].ls,l,mid,dat,pos):tr[nw].rs=insert(tr[d].rs,mid+,r,dat,pos);
tr[nw].mn=min(tr[tr[nw].ls].mn,tr[tr[nw].rs].mn);return nw;
}
int query(ri nw,ri l,ri r,ri to)
{
if(l==r)return l;
//printf("nw=%d l=%d r=%d to=%d ls.mn=%d\n",nw,l,r,to,tr[tr[nw].ls].mn);
if(tr[tr[nw].ls].mn<to)return query(tr[nw].ls,l,(l+r)>>,to);
return query(tr[nw].rs,((l+r)>>)+,r,to); } signed main()
{
freopen("4137.in","r",stdin);freopen("4137.out","w",stdout);
n=read();m=read();rp(i,,n)a[i]=st[++sum]=read(),st[++sum]=a[i]+;st[++sum]=;
sort(st+,st++sum);sum=unique(st+,st++sum)-st-;rp(i,,n)rt[i]=insert(rt[i-],,sum,lb(a[i]),i);
while(m--){ri l=read(),r=read();printf("%lld\n",st[query(rt[r],,sum,l)]);}
return ;
}
洛谷$P$4137 $Rmq\ Problem / mex$ 主席树的更多相关文章
- Luogu4137 Rmq problem/mex 主席树
传送门 用主席树水莫队题…… 我们对于前缀和建立主席树,对于主席树中的每一个叶子节点表示它对应的数字最后出现的位置的编号,非叶子节点求左右节点的最小值,那么对于每一次询问$l,r$就是在第$r$棵主席 ...
- bzoj3489: A simple rmq problem (主席树)
//========================== 蒟蒻Macaulish:http://www.cnblogs.com/Macaulish/ 转载要声明! //=============== ...
- luogu P4137 Rmq Problem / mex 主席树 + 思维
Code: #include<bits/stdc++.h> #define maxn 200001 using namespace std; void setIO(string s) { ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex
题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...
- 洛谷 P4137 Rmq Problem / mex
https://www.luogu.org/problemnew/show/P4137 只会log^2的带修主席树.. 看了题解,发现有高妙的一个log做法:权值线段树上,设数i对应的值ma[i]为数 ...
- 分块+莫队||BZOJ3339||BZOJ3585||Luogu4137||Rmq Problem / mex
题面:P4137 Rmq Problem / mex 题解:先莫队排序一波,然后对权值进行分块,找出第一个没有填满的块,直接for一遍找答案. 除了bzoj3339以外,另外两道题Ai范围都是1e9. ...
- BZOJ3339&&3585 Rmq Problem&&mex
BZOJ3339&&3585:Rmq Problem&&mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最 ...
- [bzoj3585] Rmq Problem / mex
[bzoj3585] Rmq Problem / mex bzoj luogu 看上一篇博客吧,看完了这个也顺理成章会了( (没错这篇博客就是这么水) #include<cstdio> # ...
- [BZOJ3339]Rmq Problem / mex
Description: 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Hint: \(n \le 2*10^5\) Solution: 主席树好 ...
随机推荐
- laravel 中使用tinker 验证驱动加载是否成功
在验证laravel 中 InvalidArgumentException Driver [WeiBo] not supported. public function weibo() { retu ...
- 1 项目里面如何打印log日志
1 首先写一个logging.py文件 import logging from conf import setting #配置文件,里面有日志存放路径 def mylog(): logger = l ...
- oracle函数 ASCII(x1)
[功能]:返回字符表达式最左端字符的ASCII 码值. [参数]:x1,字符表达式 [返回]:数值型 [示例] SQL> select ascii('A') A,ascii('a') a,asc ...
- Lambda plus: 云上大数据解决方案
本文会简述大数据分析场景需要解决的技术挑战,讨论目前主流大数据架构模式及其发展.最后我们将介绍如何结合云上存储.计算组件,实现更优的通用大数据架构模式,以及该模式可以涵盖的典型数据处理场景. 大数据处 ...
- 威胁快报|新兴挖矿团伙借助shodan作恶,非web应用安全再鸣警钟
近日,阿里云安全发现了一个使用未授权访问漏洞部署恶意Docker镜像进行挖矿的僵尸网络团伙.我们给这一团伙取名为Xulu,因为该团伙使用这个字符串作为挖矿时的用户名. Xulu并不是第一个攻击Dock ...
- HDU-6703-array-2019CCPC选拔赛
我TM真是一个弟弟... 题意: 给出一串1-N的数字 你每次可以把某个位置的值+1000000 或者找一个值,所有a[1]...a[r]序列的数都不能等于这个值,并且这个值>w 当时比赛觉得肯 ...
- Element-ui学习笔记3--Form表单(二)
Input输入框 Input 为受控组件,它总会显示 Vue 绑定值. 通常情况下,应当处理 input 事件,并更新组件的绑定值(或使用v-model).否则,输入框内显示的值将不会改变. 不支持 ...
- Ubuntu16.04.3深度学习环境搭建
依赖 pip3 install pillow 安装numpy相关sudo apt-get install python-numpy python-scipy python-matplotlib ipy ...
- jieba分词工具的使用方法
作为我这样的萌新,python代码的第一步是:#coding=utf-8 环境:python3.5+jieba0.39 一.jieba包安装方法: 方法1:使用conda安装 conda instal ...
- 最小生成树prim、
过年那几天确实没好好学习.在老家闲着也是闲着.可是就是没看书. 回来这几天又一直在弄个人博客.买域名云服务器备案什么的- -. 麻烦死了呢. 在腾讯花1块钱备案了一个网站www.goodgoodstu ...