[bzoj3585] Rmq Problem / mex

bzoj luogu

上一篇博客吧,看完了这个也顺理成章会了(

(没错这篇博客就是这么水)

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;
const int N=200011,SN=511;
template<typename tp>inline void read(tp &kk){
tp ret=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){ret=ret*10+ch-'0';ch=getchar();}
kk=ret*f;
}
int n,m,bl[N],bs,a[N],mina;
int ar[N];
struct ques
{
int l,r,id;
bool operator < (const ques &a)const{return bl[l]==bl[a.l]?r<a.r:bl[l]<bl[a.l];}
void init(int i){id=i,read(l),read(r);}
}q[N]; struct ShangYang
{
int l[SN],r[SN],sz,buk[N],bukk[SN],b[N],bb;
void start()
{
sz=ceil(sqrt(mina));
for(int i=0;i<mina;i+=sz)
{
bb++;
l[bb]=i,r[bb]=min(mina-1,i+sz-1);
for(int j=l[bb];j<=r[bb];j++) b[j]=bb;
}
}
void add(int x)
{
if(x>=mina) return;
if(!buk[x]) bukk[b[x]]++;
buk[x]++;
}
void mus(int x)
{
if(x>=mina) return;
buk[x]--;
if(!buk[x]) bukk[b[x]]--;
}
int query()
{
for(int i=1;i<=bb;i++)
{
if(bukk[i]<r[i]-l[i]+1)
{
for(int j=l[i];j<=r[i];j++) if(!buk[j]) return j;
}
}
return mina;
}
void ot()
{
for(int i=0;i<mina;i++) printf("%d ",buk[i]);
putchar('\n');
for(int i=1;i<=bb;i++) printf("%d ",bukk[i]);
putchar('\n');
}
}sy;
int prt[N];
void icu()
{
sort(q+1,q+1+m);
int l=1,r=0;
for(int i=1;i<=m;i++)
{
// printf("%d %d %d\n",q[i].id,q[i].l,q[i].r);
while(r<q[i].r) sy.add(a[++r]);
while(l>q[i].l) sy.add(a[--l]);
while(r>q[i].r) sy.mus(a[r--]);
while(l<q[i].l) sy.mus(a[l++]);
// sy.ot();
prt[q[i].id]=sy.query();
}
} int main()
{
// freopen("testdata.in","r",stdin);
// freopen("996.out","w",stdout);
read(n),read(m);
bs=ceil(sqrt(n));
for(int i=1;i<=n;i++) read(a[i]),ar[i]=a[i],bl[i]=(i-1)/bs+1;
sort(ar+1,ar+1+n);
ar[0]=-1;
mina=ar[n]+1;
for(int i=1;i<=n;i++) if(ar[i]-ar[i-1]>1){mina=ar[i-1]+1;break;}
if(mina==0){for(int i=1;i<=m;i++) puts("0");return 0;}
for(int i=1;i<=m;i++) q[i].init(i);
sy.start();
icu();
for(int i=1;i<=m;i++) printf("%d\n",prt[i]);
return 0;
}

[bzoj3585] Rmq Problem / mex的更多相关文章

  1. 分块+莫队||BZOJ3339||BZOJ3585||Luogu4137||Rmq Problem / mex

    题面:P4137 Rmq Problem / mex 题解:先莫队排序一波,然后对权值进行分块,找出第一个没有填满的块,直接for一遍找答案. 除了bzoj3339以外,另外两道题Ai范围都是1e9. ...

  2. 【Luogu4137】Rmq Problem/mex (莫队)

    [Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...

  3. P4137 Rmq Problem / mex (莫队)

    题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...

  4. 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex

    题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...

  5. 洛谷 P4137 Rmq Problem /mex 解题报告

    P4137 Rmq Problem /mex 题意 给一个长为\(n(\le 10^5)\)的数列\(\{a\}\),有\(m(\le 10^5)\)个询问,每次询问区间的\(mex\) 可以莫队然后 ...

  6. BZOJ 3339 && luogu4137 Rmq Problem / mex(莫队)

    P4137 Rmq Problem / mex 题目描述 有一个长度为n的数组{a1,a2,-,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 输入输出格式 输入格式: 第一行n,m. ...

  7. BZOJ3339&&3585 Rmq Problem&&mex

    BZOJ3339&&3585:Rmq Problem&&mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最 ...

  8. Rmq Problem/mex BZOJ3339 BZOJ3585

    分析: 一开始没看懂题... 后来想用二分答案却不会验证... 之后,想到用主席树来维护... 建一个权值线段树,维护出这个权值以前所有的点最晚在哪里出现... 之后,查一下是不是比查询区间的l断点大 ...

  9. Luogu P4137 Rmq Problem / mex

    区间mex问题,可以使用经典的记录上一次位置之后再上主席树解决. 不过主席树好像不是很好写哈,那我们写莫队吧 考虑每一次维护什么东西,首先记一个答案,同时开一个数组记录一下每一个数出现的次数. 然后些 ...

随机推荐

  1. Solution -「Ynoi 2018」「洛谷 P4117」五彩斑斓的世界

    \(\mathcal{Description}\)   Link.   给定序列 \(\{a_n\}\),处理 \(m\) 次操作: 给定 \(l,r,x\),把 \([l,r]\) 内所有 \(&g ...

  2. Solution -「Gym 102956F」Find the XOR

    \(\mathcal{Description}\)   Link.   给定 \(n\) 个点 \(m\) 条边的连通无向图 \(G\),边有边权.其中 \(u,v\) 的距离 \(d(u,v)\) ...

  3. JUC并发工具类之 CountDownLatch等待多线程完成

    上篇JUC同步工具之Semaphore - 池塘里洗澡的鸭子 - 博客园 (cnblogs.com)示例中,资源释放一个线程就可以退出然后另一个线程可以使用了,那如果需要所有规定数量的资源同时释放了才 ...

  4. ACM对抗赛有感

    2022.2.22 一个有"爱"的日子,注定不会平凡(对于24oier来说),原因是gg让我们参加与大连理工大学的对抗赛. 为此队友都准备好各种板子,上了比赛才发现根本没有 可怜了 ...

  5. [Python]Python入门笔记:语法基础

    Python笔记 一.基本语法 1.1 注释 文档注释: """contents""" 多行注释: ''' contents ''' 单行注 ...

  6. Python 中 selenium 库

    目录 selenium 基础语法 一. 环境配置 1. 安装环境 2. 配置参数 3. 常用参数搭配 4. 分浏览器启动 二. 基本语法 1. 元素定位 2. 控制浏览器操作 3. 操作元素的方法 3 ...

  7. Docker 设置国内镜像源

    创建或修改 /etc/docker/daemon.json 文件,修改为如下形式    # vi /etc/docker/daemon.json    {        "registry- ...

  8. 2021年企业bi工具推荐

    数据时代,商业智能工具对于企业了解复杂的大数据非常重要. 我们研究整理了国内外几十个商业智能BI工具,主要就其在功能.性能.价格.体验.安全等方面进行评测,希望帮助企业更好的进行BI产品选型. 一.t ...

  9. LSMT 实战-python

    长短期记忆网络(LSTM,Long Short-Term Memory) 使用kears 搭建一个LSTM预测模型,使用2022年美国大学生数学建模大赛中C题中处理后的BTC比特币的数据进行数据训练和 ...

  10. yum报错 , yum相关配置信息,yum重装

    docker源的问题 yum有很多错,比如网络问题,dns问题,timeout 错,还有不知道什么错误 网上有很多,网络问题,dns问题,但是我ping www.baidu.com通,所以不是这个问题 ...