Luogu4137:Rmq Problem/mex
题面
Sol
这题可能是假的
离线莫队搞一搞,把数字再分块搞一搞,就行了
# include <bits/stdc++.h>
# define IL inline
# define RG register
# define Fill(a, b) memset(a, b, sizeof(a))
using namespace std;
typedef long long ll;
const int _(2e5 + 5);
IL ll Input(){
RG char c = getchar(); RG ll x = 0, z = 1;
for(; c < '0' || c > '9'; c = getchar()) z = c == '-' ? -1 : 1;
for(; c >= '0' && c <= '9'; c = getchar()) x = (x << 1) + (x << 3) + (c ^ 48);
return x * z;
}
int n, q, bl[_], val[_], ans[_], cnt[_], sum[_];
struct Qry{
int l, r, id;
IL bool operator <(RG Qry B) const{
return bl[l] != bl[B.l] ? bl[l] < bl[B.l] : r < B.r;
}
} qry[_];
IL void Modify(RG int x, RG int d){
if(d > 0){
if(!cnt[x]) ++sum[x / 500];
++cnt[x];
}
else{
--cnt[x];
if(!cnt[x]) --sum[x / 500];
}
}
IL int Calc(){
RG int ret = 0;
for(RG int i = 0; ; ++i)
for(RG int j = 0; j < 500 && sum[i] != 500; ++j)
if(!cnt[i * 500 + j]) return i * 500 + j;
}
int main(RG int argc, RG char* argv[]){
n = Input(); q = Input();
RG int blo = sqrt(n);
for(RG int i = 1; i <= n; ++i){
val[i] = Input();
bl[i] = (i - 1) / blo + 1;
}
for(RG int i = 1; i <= q; ++i) qry[i] = (Qry){Input(), Input(), i};
sort(qry + 1, qry + q + 1);
for(RG int L = qry[1].l, R = qry[1].l - 1, i = 1; i <= q; ++i){
while(L < qry[i].l) Modify(val[L], -1), ++L;
while(L > qry[i].l) --L, Modify(val[L], 1);
while(R < qry[i].r) ++R, Modify(val[R], 1);
while(R > qry[i].r) Modify(val[R], -1), --R;
ans[qry[i].id] = Calc();
}
for(RG int i = 1; i <= q; ++i) printf("%d\n", ans[i]);
return 0;
}
Luogu4137:Rmq Problem/mex的更多相关文章
- 【Luogu4137】Rmq Problem/mex (莫队)
[Luogu4137]Rmq Problem/mex (莫队) 题面 洛谷 题解 裸的莫队 暴力跳\(ans\)就能\(AC\) 考虑复杂度有保证的做法 每次计算的时候把数字按照大小也分块 每次就枚举 ...
- 【luogu4137】 Rmq Problem / mex - 莫队
题目描述 有一个长度为n的数组{a1,a2,…,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. 思路 莫队水过去了 233 #include <bits/stdc++.h> ...
- 主席树||可持久化线段树+离散化 || 莫队+分块 ||BZOJ 3585: mex || Luogu P4137 Rmq Problem / mex
题面:Rmq Problem / mex 题解: 先离散化,然后插一堆空白,大体就是如果(对于以a.data<b.data排序后的A)A[i-1].data+1!=A[i].data,则插一个空 ...
- 分块+莫队||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次询问,每次询问一个区间内最 ...
- P4137 Rmq Problem / mex (莫队)
题目 P4137 Rmq Problem / mex 解析 莫队算法维护mex, 往里添加数的时候,若添加的数等于\(mex\),\(mex\)就不能等于这个值了,就从这个数开始枚举找\(mex\): ...
- 洛谷 P4137 Rmq Problem /mex 解题报告
P4137 Rmq Problem /mex 题意 给一个长为\(n(\le 10^5)\)的数列\(\{a\}\),有\(m(\le 10^5)\)个询问,每次询问区间的\(mex\) 可以莫队然后 ...
- [bzoj3585] Rmq Problem / mex
[bzoj3585] Rmq Problem / mex bzoj luogu 看上一篇博客吧,看完了这个也顺理成章会了( (没错这篇博客就是这么水) #include<cstdio> # ...
随机推荐
- MySQL绿色版安装
下载MySQL绿色版 去官方下载mysql.,我下载的是 mysql-5.6.27-winx64,下载后解压缩到D:盘. 安装MySQL服务 拷贝my-default.ini重命名为my.ini,修改 ...
- Openwrt上使用dnsmasq和ipset实现域名分流
目标 部署一台自动代理路由器,实现根据域名来自动设定直连或者代理,而我要做的只是设置PC的默认网关为主路由器(192.168.0.1)还是自动代理路由器(192.168.0.254). 创建Openw ...
- 平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小。
题目:平面上给定n条线段,找出一个点,使这个点到这n条线段的距离和最小. 源码如下: #include <iostream> #include <string.h> #incl ...
- NOI2009 二叉查找树 【区间dp】
[NOI2009]二叉查找树 [问题描述] 已知一棵特殊的二叉查找树.根据定义,该二叉查找树中每个结点的数据值都比它左子树结点的数据值大,而比它右子树结点的数据值小.另一方面,这棵查找树中每个结点都有 ...
- Mock摆脱后端拖拉(借鉴官网)(一)
mock是一个模拟数据生成器,旨在帮助前端独立于后端进行开发,帮助编写单元测试.mock有如下功能 根据数据模板生成模板数据 模拟ajax请求,生成请求数据 基于html模板生成模拟数据 下载安装 n ...
- 在gitlab上面创建私有库
一.创建私有库1.使用xcode建立新的工程,选择Cocoa Touch Static Library,取名为podTest WechatIMG1172.jpeg 2.创建一个类PodTest,给 ...
- @Scope注解
@Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)这个是说在每次注入的时候回自动创建一个新的bean实例 @Scope(value=Config ...
- maven The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path错误
对于这个问题的话,请在pom文件中加入 <dependency> <groupId>javax.servlet</groupId> <artifactId&g ...
- w !sudo tee %
w !sudo tee % 该命令可用于保存有权限的写文件
- Mac下使用SSH(密钥)访问Github
1,终端中输入:cd ~/.ssh 如果出现 -bash: cd: /Users/glamor/.ssh: No such file or directory,说明你之前没有用过.直接执行第二步. 如 ...