【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)份,每 ...
随机推荐
- ubuntu下载软件安装包
apt-get -d download xxx ubuntu下载软件安装包命令.仅仅下载deb格式的安装包,不安装. xxx是待下载的安装包.
- unity5, animation event
一,给导入的fbx动画添加animation event: 如下图,在双击状态机中的idle状态,打开右面的面板,点开Events项会出现一个时间轴,点击下方播放器的播放按钮或者拖动播放器时间轴上的红 ...
- 什么是:before和:after?
前几天的晚上较全面的去看了下css的一些文档和资料,大部分的样式运用都没什么大问题了,只是有些许较陌生,但是也知道他们的存在和实现的是什么样式.今天主要想在这篇学习笔记中写的也不多,主要是针对:bef ...
- 流式布局的使用方法--Masonry
http://www.jq22.com/demo/masonry/ 范例 css部分 body { background-color: #c7cad0; } .post_box { backgroun ...
- 延时NSTimer
import Foundationimport UIKit class YijfkController:UIViewController{ override func viewDidLoad() { ...
- 关于Netfilter NF_HOOK宏的outdev參数bug
1.首先指出.NF_HOOK系列宏的outdev參数的传递方式(直接传递一个net_device结构体指针)是不对的 正确的方式要么是不传递.要么是传递指针的地址,即地址的地址. 2.接下来指出,仅仅 ...
- Linux系统编程--read/write
. read/write read函数从打开的设备或文件中读取数据. #include <unistd.h> ssize_t read(int fd, void *buf, size_t ...
- C++ operator关键字
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...
- awk 计算数据的和和平均值
awk 计算数据的和和平均值 2014年12月02日 21:11:12 HaveFunInLinux 阅读数:14487更多 个人分类: 小技巧 本文译至:http://d.hatena.ne.j ...
- 如意云路由刷PandoraBox
目录 1 准备固件 2 使用uboot刷机 2.1 修改IP 2.2 开始刷写 3 ssh登录 4 刷回如意云 准备固件 http://downloads.openwrt.org.cn/Pandora ...