【BZOJ3585】mex

Description

  有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。

Input

  第一行n,m。
  第二行为n个数。
  从第三行开始,每行一个询问l,r。

Output

  一行一个数,表示每个询问的答案。

Sample Input

5 5
2 1 0 2 1
3 3
2 3
2 4
1 2
3 5

Sample Output

1
2
3
0
3

HINT

数据规模和约定
  对于100%的数据:
  1<=n,m<=200000
  0<=ai<=109
  1<=l<=r<=n

  对于30%的数据:

  1<=n,m<=1000

【BZOJ3339】Rmq Problem

题目一样,双倍经验

题解:依然直接上莫队+分块,发现虽然ai≤10^9,但是我们只需要判断它是否≥n,对于≥n的数我们直接领它为n就行了,因为n个自然数最多是0..n-1,出现了≥n的数就一定说明前面有空缺,所以不会对答案产生贡献

于是我们将自然数分块,维护块内不同自然数的个数和区间内自然数的出现次数,就没了~

又体会到了从0开始分块的美好~

#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn=200010;
int n,m,siz;
struct node
{
int qa,qb,org;
}q[maxn];
int v[maxn],ans[maxn],s[maxn],sk[maxn];
bool cmp(node a,node b)
{
if((a.qa-1)/siz==(b.qa-1)/siz) return a.qb<b.qb;
return (a.qa-1)/siz<(b.qa-1)/siz;
}
int main()
{
scanf("%d%d",&n,&m);
siz=(int)sqrt((double)n);
int i,j;
for(i=1;i<=n;i++) scanf("%d",&v[i]),v[i]=(v[i]<=n)?v[i]:n;
for(i=1;i<=m;i++) scanf("%d%d",&q[i].qa,&q[i].qb),q[i].org=i;
sort(q+1,q+m+1,cmp);
int l=1,r=0;
for(i=1;i<=m;i++)
{
while(r<q[i].qb) r++,sk[v[r]/siz]+=(s[v[r]]==0),s[v[r]]++;
while(r>q[i].qb) s[v[r]]--,sk[v[r]/siz]-=(s[v[r]]==0),r--;
while(l>q[i].qa) l--,sk[v[l]/siz]+=(s[v[l]]==0),s[v[l]]++;
while(l<q[i].qa) s[v[l]]--,sk[v[l]/siz]-=(s[v[l]]==0),l++;
for(j=0;j*siz+siz-1<=n&&sk[j]==siz;j++);
for(j=j*siz;s[j]>0;j++);
ans[q[i].org]=j;
}
for(i=1;i<=m;i++) printf("%d\n",ans[i]);
return 0;
}

【BZOJ3585/3339】mex 莫队算法+分块的更多相关文章

  1. 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块

    原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...

  2. 【bzoj3809/bzoj3236】Gty的二逼妹子序列/[Ahoi2013]作业 莫队算法+分块

    原文地址:http://www.cnblogs.com/GXZlegend/p/6805252.html bzoj3809 题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了 ...

  3. 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)

    http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...

  4. XOR and Favorite Number(莫队算法+分块)

    E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...

  5. BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块

    Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...

  6. HUAS 1483 mex(莫队算法)

    考虑莫队算法,对于区间减小的情况,可以O(1)解决.对于区间增加的情况,可能需要O(n)解决.好在数据不卡莫队. 1200ms过了. 离线+线段树 760ms过了. # include <cst ...

  7. 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块

    [BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...

  8. WHU-1551-Pairs(莫队算法+分块实现)

    Description Give you a sequence consisted of n numbers. You are required to answer how many pairs of ...

  9. [BZOJ3585]mex(莫队+分块)

    显然可以离线主席树,这里用莫队+分块做.分块的一个重要思想是实现修改与查询时间复杂度的均衡,这里莫队和分块互相弥补. 考虑暴力的分块做法,首先显然大于n的数直接忽略,于是将值域分成sqrt(n)份,每 ...

随机推荐

  1. 04-树7. Search in a Binary Search Tree (25)

    04-树7. Search in a Binary Search Tree (25) 时间限制 100 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 ...

  2. C# BackgroundWorker的Bug???

    废话不多说,上代码: public partial class Form1 : Form { BackgroundWorker _bgWorker; int count; public Form1() ...

  3. docker 下 alpine 镜像设置时区的有效办法

    在使用Docker的时候,由于很多基础linux镜像都比较大,alpine这个仅仅几兆的linux基础镜像受到了很多人喜欢,笔者也不例外,可是由于alpine中的一些配置及命令与常见的centos等系 ...

  4. pcie dma的玩法

    There is some issue with the implement script. So I took the manual steps. 1. Created the pcie core ...

  5. location [=|$|最长原则|^~](nginx-1.4.4)

    优先级由上到下依次递减: location =/a/1.png { return 400; } } location ~* \.png$ { return 403; } location /a/1.p ...

  6. ng-class中的if else判断

    ng-class中的if else判断 来自于stackoverflow的一个问题,自己刚好用到,搬过来做个标记.原问题链接 在使用ng-class时,有些时候会碰到根据是否满足条件来设置元素的样式, ...

  7. homebrew 无法安装,提示不能在根目录下使用

    sudo chown -R $(whoami) /usr/local 把/use/local的owner換成自己,就有write權限了 whoami就是一個命令,會echo當前登錄用戶的名字.當然你知 ...

  8. dp之多重背包hdu1059

    题意:价值为1,2,3,4,5,6. 分别有n[1],n[2],n[3],n[4],n[5],n[6]个.求能否找到满足价值刚好是所有的一半的方案. 思路:简单的多重背包,我建议多重背包都用二进制拆分 ...

  9. springJDBC实现查询

    其实在Spring这个框架中,提供了一些对JDBC访问数据库的封装,其中JdbcTemplate就是一个很好用的类,下面来 演示一下这个类的一些用法.首先需要导入commons-logging.jar ...

  10. Unix系统编程()发送信号的其他方式:raise和killpg

    有时,进程需要向自身发送信号,raise 函数就执行了这一任务. #include <signal.h> int raise(int sig); 在单线程程序中,调用raise相当于对ki ...