原文地址:http://www.cnblogs.com/GXZlegend/p/6805283.html


题目描述

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

输入

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

输出

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

样例输入

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

样例输出

1
2
3
0
3


题解

莫队算法+分块,双倍经验题

首先必有如果某数大于等于n,那么它对答案没有任何贡献,所以可以把大于n的数看成n

然后类似于bzoj3809,将权值分块,查询时先找到第一个不满的块,再在块中查找。

注意:自然数:自然数集是全体非负整数组成的集合(包括0),所以分块要从0开始。

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <algorithm>
  4. #define N 200010
  5. using namespace std;
  6. struct data
  7. {
  8. int l , r , bl , id;
  9. }a[N];
  10. int w[N] , cnt[N] , num[510] , ans[N];
  11. bool cmp(data a , data b)
  12. {
  13. return a.bl == b.bl ? a.r < b.r : a.bl < b.bl;
  14. }
  15. int main()
  16. {
  17. int n , m , si , i , j , lp = 1 , rp = 0;
  18. scanf("%d%d" , &n , &m) , si = (int)sqrt(n);
  19. for(i = 1 ; i <= n ; i ++ )
  20. {
  21. scanf("%d" , &w[i]);
  22. if(w[i] > n) w[i] = n;
  23. }
  24. for(i = 1 ; i <= m ; i ++ ) scanf("%d%d" , &a[i].l , &a[i].r) , a[i].bl = (a[i].l - 1) / si , a[i].id = i;
  25. sort(a + 1 , a + m + 1 , cmp);
  26. n ++ , si = (int)sqrt(n);
  27. for(i = 1 ; i <= m ; i ++ )
  28. {
  29. while(lp > a[i].l) lp -- , num[w[lp] / si] += (!cnt[w[lp]]) , cnt[w[lp]] ++ ;
  30. while(rp < a[i].r) rp ++ , num[w[rp] / si] += (!cnt[w[rp]]) , cnt[w[rp]] ++ ;
  31. while(lp < a[i].l) cnt[w[lp]] -- , num[w[lp] / si] -= (!cnt[w[lp]]) , lp ++ ;
  32. while(rp > a[i].r) cnt[w[rp]] -- , num[w[rp] / si] -= (!cnt[w[rp]]) , rp -- ;
  33. for(j = 0 ; j <= (n - 1) / si ; j ++ ) if(num[j] < si) break;
  34. j *= si;
  35. while(cnt[j]) j ++ ;
  36. ans[a[i].id] = j;
  37. }
  38. for(i = 1 ; i <= m ; i ++ ) printf("%d\n" , ans[i]);
  39. return 0;
  40. }

【bzoj3585/bzoj3339】mex/Rmq Problem 莫队算法+分块的更多相关文章

  1. BZOJ 3339: Rmq Problem 莫队算法

    3339: Rmq Problem 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=3339 Description n个数,m次询问l,r ...

  2. 【题解】P4137 Rmq Problem(莫队)

    [题解]P4137 Rmq Problem(莫队) 其实这道题根本就不用离散化! 因为显然有\(mex\)值是\(\le 2\times 10^5\)的,所以对于大于\(2\times 10^5\)的 ...

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

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

  4. 【BZOJ3585/3339】mex 莫队算法+分块

    [BZOJ3585]mex Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一个区间内最小没有出现过的自然数. Input 第一行n,m. 第二行为n个数. ...

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

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

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

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

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

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

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

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

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

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

随机推荐

  1. 前端框架之bootstrap及相关技术网站

    1.web框架之bootstrap bootstrap来源Twitter,是一个CSS/HTML框架,它是基于HTML,CSS,JavaScript下的,使用简洁,当中提供了很多HTML和CSS 如用 ...

  2. What is EJB

    What is EJB 0.什么是EJB? 答:EJB是用于构建企业应用程序模块托管的.服务器端组件架构.EJB技术加速并简化了开发基于Java技术的分布式.事务性.安全和便携的应用程序. 先看一下E ...

  3. kafka单机环境搭建及其基本使用

    最近在搞kettle整合kafka producer插件,于是自己搭建了一套单机的kafka环境,以便用于测试.现整理如下的笔记,发上来和大家分享.后续还会有kafka的研究笔记,依然会与大家分享! ...

  4. scrapy--selenium(二)

    今天学习了很多,还是想给大家讲一讲正题:scrapy的动态加载AJax的网页爬取:selenium.让我们开始 三: 针对大型电商网站:京东网,因为比较有代表性,爬出来有点小成就.先给大家看下效果图. ...

  5. 【菜鸟笔记】记一次django无法正常在ie和edge浏览器渲染html页面

    如图所示,django无法渲染html显示成下载文件了 一步一步的从render ==>HttpResponse ==>HttpResponseBase 找到 即django文件夹下的ht ...

  6. 如何在创建hive表格的python代码中导入外部文件

    业务场景大概是这样的,我要对用户博文进行分词(这个步骤可以看这篇文章如何在hive调用python的时候使用第三方不存在的库-how to use external python library in ...

  7. Educational Codeforces Round 43 E. Well played!(贪心)

    E. Well played! time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  8. 27-Middleware管道介绍

    1-Middleware管道介绍,. 如果匹配上/task,则界面只会显示i am task. public void Configure(IApplicationBuilder app, IHost ...

  9. GPIO基础知识

    STM32 GPIO入门知识 GPIO是什么? 通用输入输出端口,可以做输入,也可以做输出.GPIO端口可通过程序配置成输入或输出. 引脚和GPIO的区别和联系 STM32的引脚中,有部分是做GPIO ...

  10. 15.3,redis持久化RDB与AOF

    redis持久化 Redis是一种内存型数据库,一旦服务器进程退出,数据库的数据就会丢失,为了解决这个问题,Redis提供了两种持久化的方案,将内存中的数据保存到磁盘中,避免数据的丢失. RDB持久化 ...