luogu P4137 mex
题面:
有一个长度为$n$的数组${a1,a2,…,an}$。$m$次询问,每次询问一个区间内最小没有出现过的自然数。
令$lst[i][r]$表示在$[1, r]$中数值$i$最后出现的位置
那么,我们要求的便是$min(t)$
使得$lst[t][r] \geqslant l(0 \leqslant t \leqslant t - 1)$
注意到$lst[][i]$相比于$lst[][i - 1]$其实只有一个地方变化了
可以考虑用可持久化线段树
$t$可以选择在线段树上二分,相应地需要维护$lst[]$的最小值
都挺简单,相信你们都会打代码吧
果然有不是差分的题。。。。。
#include <cstdio>
#include <algorithm>
#include <iostream>
#define sid 10000050
#define ri register int
using namespace std; char RR[];
extern inline char gc() {
static char *S = RR + , *T = RR + ;
if(S == T) fread(RR, , , stdin), S = RR;
return *S ++;
}
inline int read() {
int p = , w = ; char c = gc();
while(c > '' || c < '') { if(c == '-') w = -; c = gc(); }
while(c >= '' && c <= '') { p = p * + c - ''; c = gc(); }
return p * w;
} int n, m, cnt, tot;
int rt[], ls[sid], rs[sid], minhp[sid]; void Insert(int &now, int pre, int l, int r, int val, int pos) {
now = ++ cnt;
ls[now] = ls[pre]; rs[now] = rs[pre];
if(l == r) { minhp[now] = pos; return; }
int mid = (l + r) >> ;
if(val <= mid) Insert(ls[now], ls[pre], l, mid, val, pos);
else Insert(rs[now], rs[pre], mid + , r, val, pos);
minhp[now] = min(minhp[ls[now]], minhp[rs[now]]);
} int Query(int R, int l, int r, int L) {
if(l == r) return l;
int mid = (l + r) >> ;
if(minhp[ls[R]] < L) return Query(ls[R], l, mid, L);
else return Query(rs[R], mid + , r, L);
} int main() {
n = read(); m = read();
for(ri i = ; i <= n; i ++) {
int u = read();
if(u >= n) rt[i] = rt[i - ];
else Insert(rt[i], rt[i - ], , n, u, i);
}
for(ri i = ; i <= m; i ++) {
int l, r;
l = read(); r = read();
printf("%d\n", Query(rt[r], , n, l));
}
return ;
}
luogu P4137 mex的更多相关文章
- 【luogu P4137 Rmq Problem / mex】 题解
题目链接:https://www.luogu.org/problemnew/show/P4137 求区间内最大没出现过的自然数 在add时要先判断会不会对当前答案产生影响,如果有就去找下一个答案. # ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex
题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...
- Luogu P4137 Rmq Problem / mex
区间mex问题,可以使用经典的记录上一次位置之后再上主席树解决. 不过主席树好像不是很好写哈,那我们写莫队吧 考虑每一次维护什么东西,首先记一个答案,同时开一个数组记录一下每一个数出现的次数. 然后些 ...
- luogu P4137 Rmq Problem / mex 主席树 + 思维
Code: #include<bits/stdc++.h> #define maxn 200001 using namespace std; void setIO(string s) { ...
- luogu P4137 Rmq Problem / mex(可持久化线段树)
一开始想的是莫队,然后维护几个bitset,然后瞎搞.脑子里想了想实现,发现并不好写. 还是主席树好写.我们维护一个权值的线段树,记录每一个权值的最后一次出现的位置下标.我们查询的时候要在前\(r\) ...
- 【题解】Luogu CF817F MEX Queries
原题传送门 817,我突然想到了某8位质数 这题珂以说是珂朵莉树的模板 三个操作都肥肠简单,前两个区间赋值,第三个区间0变1,1变0 每次输出从头开始扫描就行(我忘了珂朵莉树的性质,竟然还动态维护最左 ...
- P4137 Rmq Problem / mex
目录 链接 思路 线段树 莫队 链接 https://www.luogu.org/problemnew/show/P4137 思路 做了好几次,每次都得想一会,再记录一下 可持久化权值线段树 区间出现 ...
- 洛谷 P4137 Rmq Problem / mex
https://www.luogu.org/problemnew/show/P4137 只会log^2的带修主席树.. 看了题解,发现有高妙的一个log做法:权值线段树上,设数i对应的值ma[i]为数 ...
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
随机推荐
- Eng1—English daily notes
English daily notes 2015年 4月 Phrases 1. As a side note #作为附注,顺便说句题外话,和by the way意思相近,例句: @1:As a sid ...
- Cloudera 安装
参考网址: http://tcxiang.iteye.com/blog/2087597 http://archive.cloudera.com/cdh5/ http://archive.clouder ...
- 2017ACM暑期多校联合训练 - Team 5 1001 HDU 6085 Rikka with Candies (模拟)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- VueJS 获取并编译远程模板 解决方案(简单版)
原文链接:https://savokiss.com/tech/vuejs-remote-template.html see: forum
- Dijkstra算法(转)
基本思想 通过Dijkstra计算图G中的最短路径时,需要指定起点s(即从顶点s开始计算). 此外,引进两个集合S和U.S的作用是记录已求出最短路径的顶点(以及相应的最短路径长度),而U则是记录还未求 ...
- SSL证书生成方法【转】
转自 SSL证书生成方法 - fyang的专栏 - 博客频道 - CSDN.NEThttp://blog.csdn.net/fyang2007/article/details/6180361 一般情况 ...
- 142.Linked List Cycle II---双指针
题目链接 题目大意:141题目的扩展,给出单链表,判断是否有环,如果有环,找出环的开始的结点,如果没有环,返回null. 法一(借鉴):在已经找出单链表环的基础上再找开始结点,要时刻记住这个环不一定是 ...
- TreeSet之定制排序和自然排序
TreeSet的几大特点: 1.TreeSet中存储的类型必须是一致的,不能一下存int,一下又存string 2.TreeSet在遍历集合元素时,是有顺序的[从小到大](我的理解,如果存的字母,按字 ...
- 中高级JAVA面试知识点(个人整理)
JVM运行时数据区域 方法区: 用 于存储虚拟机加载的类信息,常量,静态变量,JIT编译后的代码,所有线程共享 堆:所有线程共享,用来存储实例对象. 虚拟机栈:线程私有,生命周期与线程相同,每个方法被 ...
- js中的cookie使用和vue-cookie的使用
在HTTP协议的定义中,采用了一种机制来记录客户端和服务器端交互的信息,这种机制被称为cookie,cookie规范定义了服务器和客户端交互信息的格式.生存期.使用范围.安全性. 在JavaScrip ...