[清华集训]Rmq Problem / mex
我们离线处理这些询问
在右端点所在的位置用vector来push_back询问
维护每个数值最后出现的位置p[x]
从左往右扫,边走边回答询问
对于每个询问我们回答第一个p[x]<l的x
这个可以用分块来维护
时间复杂度\(\Theta(n \sqrt{n})\)
#include"cstdio"
#include"cstring"
#include"iostream"
#include"algorithm"
#include"vector"
#include"cmath"
using namespace std;
const int MAXN=2e5+5;
int n,m,siz;
int v[MAXN],id[MAXN],l[MAXN],r[MAXN],p[MAXN],mi[MAXN],ans[MAXN];
struct rpg{int l,id;};
vector<rpg> vec[MAXN];
void ins(int x,int v)
{
if(x>=n) return;
p[x]=v;mi[id[x]]=n;
for(int i=l[x];i<=r[x];++i) mi[id[x]]=min(mi[id[x]],p[i]);
return;
}
int query(int v)
{
for(int i=0;i<n;i=r[i]+1){
if(mi[id[i]]<v){
for(int j=i;j<=r[i];++j){
if(p[j]<v) return j;
}
}
}return n;
}
int main()
{
scanf("%d%d",&n,&m);siz=sqrt(n);
for(int i=0;i<n;++i) id[i]=i/siz+1,l[i]=(id[i]-1)*siz,r[i]=min(id[i]*siz-1,n-1);
for(int i=1;i<=n;++i) scanf("%d",&v[i]);
for(int i=1;i<=m;++i){int l,r;scanf("%d%d",&l,&r);vec[r].push_back((rpg){l,i});}
for(int i=1;i<=n;++i){
ins(v[i],i);
for(int j=0;j<vec[i].size();++j){
ans[vec[i][j].id]=query(vec[i][j].l);
}
}for(int i=1;i<=m;++i) printf("%d\n",ans[i]);
return 0;
}
[清华集训]Rmq Problem / mex的更多相关文章
- 【Luogu4137】Rmq Problem/mex (莫队)
[Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||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\) 可以莫队然后 ...
- 分块+莫队||BZOJ3339||BZOJ3585||Luogu4137||Rmq Problem / mex
题面:P4137 Rmq Problem / mex 题解:先莫队排序一波,然后对权值进行分块,找出第一个没有填满的块,直接for一遍找答案. 除了bzoj3339以外,另外两道题Ai范围都是1e9. ...
- BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)
P4137 Rmq Problem / mex 题目描述 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. ...
- 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> # ...
- Luogu P4137 Rmq Problem / mex
区间mex问题,可以使用经典的记录上一次位置之后再上主席树解决. 不过主席树好像不是很好写哈,那我们写莫队吧 考虑每一次维护什么东西,首先记一个答案,同时开一个数组记录一下每一个数出现的次数. 然后些 ...
随机推荐
- webpack快速入门——如何安装webpack及注意事项
1.window+R键,输入cmd打开命令行工具,输入 mkdir XXXX(XX:文件夹名): 2.cd XXX 进入刚刚创建好的文件夹里,输入cnpm install -g webpack (安装 ...
- docker安装指定版本TAG的镜像
在docker中安装镜像,一般过程是,docker search 软件名称. 本文以tomcat为例,讲解下载指定版本TAG的tomcat. 搜索tomcat镜像 $ sudo docker sear ...
- 4、xamarin forms 设置安卓的toolbar的高度
降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 今天有群友说 如何调整 toolbar 的 高度. 最初遇到这个问题第一反映就是CustomRender 设置高度借助la ...
- (转)pt-online-schema-change在线修改表结构
原文:http://www.ywnds.com/?p=4442 一.背景 MySQL大字段的DDL操作:加减字段.索引.修改字段属性等,在5.1之前都是非常耗时耗力的,特别是会对MySQL服务产生影响 ...
- (转)浅谈MySql的存储引擎(表类型)
原文:http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到 ...
- 目录打散-hash算法
前几篇说了文件上传,都是上传到了WebRoot下的up目录,这样是不行的,文件多了性能就不行了.文件一般都是分目录存放的,这里讲建目录的一种算法.先看结果,经过本算法建的目录,结构是这样的,还以up目 ...
- HDFS DATANODE 磁盘容量的最小值
HDFS的DATANODE的剩余空间具体要到多大?关于这个问题,下面记录下对这个问题的调查 昨天,讨论群里面给出了一个异常: op@odbtest bin]$ hadoop fs -put ../tm ...
- Centos 6.5下的OPENJDK卸载和SUN的JDK安装、环境变量配置
不多说,直接上干货! 说明 图形界面安装,会自带有Centos6.5自带的OPRNJDK!!! *********************************自带的OPENJDK的卸载****** ...
- Centos 安装python3
安装python3 大多数云平台没有安装zlib和openssl的devel包,需要提前安装 下载python源码 cd /home/cheat wget https://www.python.o ...
- 解释mysql 语句 ——解释CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci
在我们创建mysql数据库的时候我们经常会用到这句SQL:CREATE DATABASE `test` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ ...