【BZOJ3585/3339】mex 莫队算法+分块
【BZOJ3585】mex
Description
有一个长度为n的数组{a1,a2,...,an}。m次询问,每次询问一个区间内最小没有出现过的自然数。
Input
第一行n,m。
第二行为n个数。
从第三行开始,每行一个询问l,r。
Output
一行一个数,表示每个询问的答案。
Sample Input
2 1 0 2 1
3 3
2 3
2 4
1 2
3 5
Sample Output
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 莫队算法+分块的更多相关文章
- 【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块
原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html 题目描述 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没 ...
- 【bzoj3809/bzoj3236】Gty的二逼妹子序列/[Ahoi2013]作业 莫队算法+分块
原文地址:http://www.cnblogs.com/GXZlegend/p/6805252.html bzoj3809 题目描述 Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了 ...
- 【BZOJ】2038: [2009国家集训队]小Z的袜子(hose)(组合计数+概率+莫队算法+分块)
http://www.lydsy.com/JudgeOnline/problem.php?id=2038 学了下莫队,挺神的orzzzz 首先推公式的话很简单吧... 看的题解是从http://for ...
- XOR and Favorite Number(莫队算法+分块)
E. XOR and Favorite Number time limit per test 4 seconds memory limit per test 256 megabytes input s ...
- BZOJ 3809 Gty的二逼妹子序列 莫队算法+分块
Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们 ...
- HUAS 1483 mex(莫队算法)
考虑莫队算法,对于区间减小的情况,可以O(1)解决.对于区间增加的情况,可能需要O(n)解决.好在数据不卡莫队. 1200ms过了. 离线+线段树 760ms过了. # include <cst ...
- 【BZOJ3809/3236】Gty的二逼妹子序列 [Ahoi2013]作业 莫队算法+分块
[BZOJ3809]Gty的二逼妹子序列 Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b ...
- WHU-1551-Pairs(莫队算法+分块实现)
Description Give you a sequence consisted of n numbers. You are required to answer how many pairs of ...
- [BZOJ3585]mex(莫队+分块)
显然可以离线主席树,这里用莫队+分块做.分块的一个重要思想是实现修改与查询时间复杂度的均衡,这里莫队和分块互相弥补. 考虑暴力的分块做法,首先显然大于n的数直接忽略,于是将值域分成sqrt(n)份,每 ...
随机推荐
- 各种Map的区别,想在Map放入自定义顺序的键值对
今天做统计时需要对X轴的地区按照地区代码(areaCode)进行排序,由于在构建XMLData使用的map来进行数据统计的,所以在统计过程中就需要对map进行排序. 一.简单介绍Map 在讲解Map排 ...
- tp配置+路由+基本操作
一.打开apache 的配置文件httpd_conf添加以下代码 <VirtualHost *:80>DocumentRoot "D:\wwwroot\thinkphp\publ ...
- sysbench的安装详解
sysbench是一个压力测试工具.可以用它来测试cpu.mem.disk.thread.mysql.postgr.oracle:然而作为一个mysql dba 我当然是用它来压测mysql啦! 一. ...
- MySQL主从不一致情形与解决方法
参考:https://blog.csdn.net/hardworking0323/article/details/81046408 https://blog.csdn.net/lijingkuan/a ...
- python登陆Tom邮箱的代码一例
本文出处参考:http://www.cnblogs.com/LinuxHunter/archive/2010/11/30/1891635.html 在很多的python 教程中都会讲到登录邮箱或发送邮 ...
- Typeface-为自定义字体提供字体内存缓存
Android 上自定义字体的代码一般如下: TextView textview = (TextView) findViewById(R.id.your_referenced_textview); / ...
- 获取Oracle数据库中字段信息
select t.DATA_PRECISION,t.DATA_SCALE,t.DATA_LENGTH,t.DATA_TYPE,t.COLUMN_NAME, t.NULLABLE,t.DATA_DEFA ...
- hdu3457(有向图的dp问题)
同http://www.cnblogs.com/ziyi--caolu/p/3202511.html #include<iostream> #include<stdio.h> ...
- C++-教程3-VS2010C++各种后缀说明
相关资料:"http://blog.csdn.net/kibaamor/article/details/18700607""http://blog.chinaunix.n ...
- jquery头文件的引入
<script type="text/javascript" src="/library/js/jquery/jquery-1.9.1.min.js"&g ...