bzoj 3585 mex

Written with StackEdit.

题目描述

有一个长度为\(n\)的数组\({a_1,a_2,...,a_n}\)\(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

对于\(30\%\)的数据:
\(1<=n,m<=1000.\)

对于\(100\%\)的数据:
\(1<=n,m<=200000,0<=ai<=10^9,1<=l<=r<=n.\)

Solution

  • 多个区间询问,可以离线,并且可以\(O(1)\)转移,考虑使用莫队.
  • 但是\(a_i\leq 10^9\),直接开个\(cnt\)数组记录当前区间内的各种个数似乎不可做?
  • 然而,对于大于\(n\)的元素,我们可以直接无视它.
  • 一方面,它一定不会成为答案,否则需要出现至少\(0\)~\(n\)\(n+1\)个数.
  • 另一方面,它肯定不会对答案做出贡献.否则答案也会大于\(n\),据上,不可能.
  • 所以\(a_i\)的范围只是虚张声势...我们处理时将大于\(n\)的数都视作\(n+1\)即可.
  • 然后就是一个愉快的莫队板子题了.
#include<bits/stdc++.h>
using namespace std;
typedef long long LoveLive;
inline int read()
{int out=0,fh=1;char jp=getchar();while ((jp>'9'||jp<'0')&&jp!='-')jp=getchar();if (jp=='-'){fh=-1;jp=getchar();}while (jp>='0'&&jp<='9'){out=out*10+jp-'0';jp=getchar();}return out*fh;
}
const int MAXN=2e5+10;
int cnt[MAXN];
set<int> s;
int Ans[MAXN];
int n,m;
int a[MAXN];
int belong[MAXN],BlockSize;
int L,R,res;
struct Query{int l,r;int id;bool operator < (const Query &rhs) const {if(belong[l]!=belong[rhs.l])return belong[l]<belong[rhs.l];return belong[r]<belong[rhs.r];}
}q[MAXN];
void BuildBlocks()
{BlockSize=sqrt(n);for(int i=1;i<=n;++i)belong[i]=(i/BlockSize)+1;
}
void add(int pos)
{++cnt[a[pos]];for(int i=res;i<=n+2;++i)if(cnt[i]==0){res=i;return;}
}
void remove(int pos)
{--cnt[a[pos]];if(cnt[a[pos]]==0)res=min(res,a[pos]);
}
int main()
{n=read(),m=read();for(int i=1;i<=n;++i)a[i]=read(),a[i]=a[i]>n?n+1:a[i];for(int i=1;i<=m;++i){q[i].id=i;q[i].l=read();q[i].r=read();      }for(int i=0;i<=n;++i)s.insert(i);a[0]=n+2;BuildBlocks();sort(q+1,q+1+m);L=0,R=0;for(int i=1;i<=m;++i){int l=q[i].l,r=q[i].r;while(L<l)remove(L),++L;while(L>l)--L,add(L);while(R<r)++R,add(R);while(R>r)remove(R),--R;Ans[q[i].id]=res;}for(int i=1;i<=m;++i)printf("%d\n",Ans[i]);return 0;
}

转载于:https://www.cnblogs.com/jklover/p/10105545.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/570057.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg转mp4格式

FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 uploadfile/mp4/test.mp4FFMPEG -i uploadfile/video/test.wmv -c:v libx264 -strict -2 -s 1280x720 -b 1000k uploadfile/mp4/test.mp4

(笔记)网络技术学习交流会

1、网络工程师发展历程 &#xff08;1&#xff09;网络管理员阶段 ①计算机硬件的维护 ②计算机系统的维护 ③局域网的维护 ④打印服务的维护 ⑤业务数据的管理&#xff08;更新、备份&#xff09; ⑥网站的维护&#xff08;在网站上进行更新&#xff09; ⑦在网络上对公司进行…

CentOS 6服务器简单安全配置

1. 禁用不使用的用户 注意&#xff1a;不建议直接删除&#xff0c;当你需要某个用户时&#xff0c;自己重新添加会很麻烦。也可以usermod -L或passwd -l user锁定。 cp /etc/passwd{,.bak}修改之前先备份 vi /etc/passwd编辑用户&#xff0c;在前面加上#注释掉此行 注释的用…

【原创】大叔经验分享(6)Oozie如何查看提交到Yarn上的任务日志

通过oozie job id可以查看流程详细信息&#xff0c;命令如下&#xff1a; oozie job -info 0012077-180830142722522-oozie-hado-W 流程详细信息如下&#xff1a; Job ID : 0012077-180830142722522-oozie-hado-W -----------------------------------------------------------…

Beta 冲刺(3/7)

Beta 冲刺&#xff08;3/7&#xff09; Beta 冲刺 &#xff08;3/7&#xff09; 队名&#xff1a;第三视角 组长博客链接 本次作业链接 团队部分 团队燃尽图 工作情况汇报 张扬&#xff08;组长&#xff09; 过去两天完成了哪些任务 文字/口头描述 参与开发关键词提醒部分展示G…

vuex的理解

首先需要了解vuex的基本概念和使用方式&#xff0c;vue的官网也有很详细的说明或者浏览&#xff1a;https://zhuanlan.zhihu.com/p/24357762。vue是单页应用所以当页面刷新时vuex的数据随之也被清空了&#xff0c;如何实现页面被刷新而数据没有被清空呢&#xff1f;vuex主要是v…

Redis高可用sentinel

1.sentine介绍 Redis-Sentinel是Redis官方推荐的高可用性(HA)解决方案&#xff0c;当用Redis做Master-slave的高可用方案时&#xff0c;假如master宕机了&#xff0c;Redis本身(包括它的很多客户端)都没有实现自动进行主备切换&#xff0c;而Redis-sentinel本身也是一个独立运行…

关于eclipse web项目认不到用户库的问题

解决方法&#xff1a; 选中项目右键属性&#xff0c;弹出对话框&#xff0c;选择Deployment Assembly&#xff0c;设置用户库对应路径。

Python中 类和对象调用其他类中的变量和方法

class house_item: def __init__(self,name,area): self.namename self.areaarea def __str__(self): return "%s,\n面积是%.2f" % (self.name,self.area)class house: def __init__(self,house_type,house_area): self.typeho…

201771010109焦旭超《面向对象程序设计(java)》第十六周学习总结

1、实验目的与要求 (1) 掌握线程概念&#xff1b; (2) 掌握线程创建的两种技术&#xff1b; (3) 理解和掌握线程的优先级属性及调度方法&#xff1b; (4) 掌握线程同步的概念及实现技术&#xff1b; 2、实验内容和步骤 实验1&#xff1a;测试程序并进行代码注释。 测试程序1&am…

Hibernate hql getHibernateTemplate()常用方法汇总

getHibernateTemplate()常用方法 一、find(String queryString); 示例&#xff1a; Java代码 this.getHibernateTemplate().find("from bean.User"); 返回所有User对象 二、find(String queryString , Object value); 示例&#xff1a; Java代码 this.getHib…

ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)

using System; using System.Collections.Generic; using System.Data; using System.Text;namespace Gzcms.Common {public class CreateTable{public static DataTable getTable(){//1.创建 datatable DataTable dt new DataTable("datatable");//可以给表创建一…

csvn下载地址

csvn下载地址&#xff1a;https://ctf.open.collab.net/sf/go/projects.svnedge/wiki

封装jquery的ajax,便于加载等待提示框

先贴上代码。传入4给参数&#xff0c;保证post&#xff0c;get都能执行&#xff0c;和普通的ajax区别在于添加了设置的timeout。并在每一次的发送接收请求后执行dialog&#xff08;&#xff09;方法。function AjaxRequest(apiUrl, method, param, callback) {$.ajax({url: api…

nginx+tomcat7+memcached

tomcat/conf/server.xml下Context标签下添加 <Manager className"de.javakaffee.web.msm.MemcachedBackupSessionManager" memcachedNodes"n1:127.0.0.1:11211" sticky"false" lockingMode"auto" …

c# Brush、Color、String相互转换

using System.Windows.Media; 1、String转换成Color Color color (Color)ColorConverter.ConvertFromString(string); 2、String转换成Brush BrushConverter brushConverter new BrushConverter(); Brush brush (Brush)brushConverter.ConvertFromString(string)…

jSignature使用方法

一、初始画布var arguments { width: 100%, height: 100%, color:#000, "decor-color": "transparent",//去除默认画布上那条横线 lineWidth: 3 }; $("#signature")…

修改gitignore 后不起作用

git rm -r --cached .git add .git commit -m update .gitignore转载于:https://www.cnblogs.com/php-no-2/p/10131903.html

问题解决:Sublime 乱码显示GBK编码文件解决

安装Package Control 自动安装很方便&#xff0c;网上代码很多。我用的是Sublime Text3&#xff0c;通过View–Show Console或者使用快捷键Ctrl 调出console&#xff0c;然后将下边的代码复制粘贴&#xff0c; import urllib.request,os; pf Package Control.sublime-package…

bzoj 1069 [SCOI2007]最大土地面积——旋转卡壳

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id1069 发现 n 可以 n^2 。所以枚举对角线&#xff0c;分开的两部分三角形就可以旋转卡壳了。 注意坐标是实数。忘了改生成函数调了 2h …… 也不知道用不用管凸包上只有 3 个点的情况。反正这样的话就是枚举一…