BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)
P4137 Rmq Problem / mex
题目描述
有一个长度为n的数组{a1,a2,…,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。
输入输出格式
输入格式:
第一行n,m。
第二行为n个数。
从第三行开始,每行一个询问l,r。
输出格式:
一行一个数,表示每个询问的答案。
输入输出样例
输入样例#1:
5 5
2 1 0 2 1
3 3
2 3
2 4
1 2
3 5
输出样例#1:
1
2
3
0
3
说明
对于30%的数据:1<=n,m<=1000
对于100%的数据:1<=n,m<=200000,0<=ai<=10^9,1<=l<=r<=n
简单莫队
不过这个转换不一定是O(n)的
注意细节
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdio>
#define R register
#define maxn 301000
using namespace std;
int n,m,now;
int a[maxn];
int belong[maxn];
int vis[maxn];
int ma;
struct node {
int l,r,id;
} q[maxn];
int ans[maxn];
inline int read()
{
int x=0,f=1;char s=getchar();
while('0'>s||s>'9') {
if(s=='-') f=-1;
s=getchar();
}
while('0'<=s&&s<='9') {
x=x*10+s-'0';
s=getchar();
}
return x*f;
}
inline bool cmp(node a,node b) {
return belong[a.l]==belong[b.l] ? a.r<b.r : belong[a.l]<belong[b.l];
}
inline void add(int x) {
++vis[x];
if(now < x) return;
if(now==x&&vis[x]==1) { //细节在这里
for(R int i=now+1; i<n; ++i) {
if(!vis[i]) {
now=i;
return;
}
}
}
}
inline void delet(int x) {
--vis[x];
if(now < x) return;
if(now > x) {
if(!vis[x]) {
now=x;
}
}
}
int main() {
n=read();
m=read();
int k=sqrt(n);
//别看a[]很大,ans范围小于n
for(R int i=1; i<=n; ++i) {
a[i]=read();
if(a[i] > n)
a[i]=n+1;
}
if(n<=1000&&m<=1000) { //baoli
while(m--) {
int l,r;
memset(vis,0,sizeof(vis));
l=read();
r=read();
for(R int i=l; i<=r; ++i)
vis[a[i]]=1;
R int i=0;
while(vis[i]) i++;
printf("%d\n",i);
}
return 0;
}
for(R int i=1; i<=n; ++i)
belong[i]=(i-1)/k+1;
for(R int i=1; i<=m; ++i)
{
q[i].l=read();
q[i].r=read();
q[i].id=i;
}
sort(q+1,q+1+m,cmp);
int l=1,r=0;
for(R int i=1; i<=m; ++i) {
while(l > q[i].l) add(a[--l]);
while(l < q[i].l) delet(a[l++]);
while(r < q[i].r) add(a[++r]);
while(r > q[i].r) delet(a[r--]);
ans[q[i].id]=now;
}
for(R int i=1; i<=m; ++i)
printf("%d\n",ans[i]);
return 0;
}
BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)的更多相关文章
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
- 【luogu4137】 Rmq Problem / mex - 莫队
题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 思路 莫队水过去了 233 #include <bits/stdc++.h> ...
- 分块+莫队||BZOJ3339||BZOJ3585||Luogu4137||Rmq Problem / mex
题面:P4137 Rmq Problem / mex 题解:先莫队排序一波,然后对权值进行分块,找出第一个没有填满的块,直接for一遍找答案. 除了bzoj3339以外,另外两道题Ai范围都是1e9. ...
- Luogu4137 Rmq problem/mex 主席树
传送门 用主席树水莫队题…… 我们对于前缀和建立主席树,对于主席树中的每一个叶子节点表示它对应的数字最后出现的位置的编号,非叶子节点求左右节点的最小值,那么对于每一次询问$l,r$就是在第$r$棵主席 ...
- 【Luogu4137】Rmq Problem/mex (莫队)
[Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||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 解题报告
P4137 Rmq Problem /mex 题意 给一个长为\(n(\le 10^5)\)的数列\(\{a\}\),有\(m(\le 10^5)\)个询问,每次询问区间的\(mex\) 可以莫队然后 ...
- [bzoj3585] Rmq Problem / mex
[bzoj3585] Rmq Problem / mex bzoj luogu 看上一篇博客吧,看完了这个也顺理成章会了( (没错这篇博客就是这么水) #include<cstdio> # ...
- BZOJ3339&&3585 Rmq Problem&&mex
BZOJ3339&&3585:Rmq Problem&&mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最 ...
随机推荐
- Django中配置用Redis做缓存和session
django-redis文档: http://django-redis-chs.readthedocs.io/zh_CN/latest/# 一.在Django中配置 # Django的缓存配置 CAC ...
- 几种常见web攻击手段及其防御方式
XSS(跨站脚本攻击) CSRF(跨站请求伪造) SQL注入 DDOS web安全系列目录 总结几种常见web攻击手段极其防御方式 总结几种常见的安全算法 XSS 概念 全称是跨站脚本攻击(Cross ...
- 兼容IE7以上的无缝滚动,带箭头、停顿
<!DOCTYPE HTML><html> <head> <meta charset="utf-8" /> ...
- mysql 用户与权限
1.用户 1)创建用户 "create user '用户'@'host' identified by '密码';" 在5.7以后的版本中要求密码包含至少一个大写字母,一个小写字 ...
- cocos2d-x教程3:用php或DOS批处理命令来转换文件和解压缩zip
在cocos2d-x使用中,须要不停的转换文件和压缩或解压文件.假设全人工来做,太麻烦了,且easy出错. 我如今把一些用的到批处理贴出来,供大家使用 自己主动把dat文件按数字排序重命名gz.DOS ...
- react-native 相关问题
使用create-react-native-app时,报错,好像是npm版本不对,想问下npm怎么降低版本? npm install npm@4 -g 创建并启动项目 老方法1 创建项目 react ...
- Spark Sort Based Shuffle内存分析
分布式系统里的Shuffle 阶段往往是非常复杂的,而且分支条件也多,我只能按着我关注的线去描述.肯定会有不少谬误之处,我会根据自己理解的深入,不断更新这篇文章. 前言 借用和董神的一段对话说下背景: ...
- 使用Python2.7 GET Onenet平台的数据
效果 代码 # -*- coding: utf-8 -*- """ ------------------------------------------------- F ...
- EXTJS4扩展实例:一个调用Ext.picker.Color的颜色选择菜单
运行环境:Extjs4.2.1 运行效果: 调用代码: Ext.require(['MyExtend.Form.Field.ColorField']); Ext.onReady(function() ...
- C++声明和定义
目录 1 参考 2 概念 2.1 声明 2.2 定义 3 对比 3.1 声明但不是定义的情况 3.2 声明且是定义的情况 3.3 特殊情况 1. 参考 1. <C++程序设计语言>4.9 ...