BZOJ_3585_mex && BZOJ_3339_Rmq Problem_主席树

Description

  有一个长度为n的数组{a1,a2,...,an}。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

数据规模和约定
  对于100%的数据:
  1<=n,m<=200000
  0<=ai<=109
  1<=l<=r<=n

  对于30%的数据:
  1<=n,m<=1000


分块链接http://www.cnblogs.com/suika/p/8890783.html

对每个前缀维护每个数最后出现的位置并维护出这个的最小值。

查询[L,R]时找到R对应的前缀,然后主席树上二分,用左边的最小值和L比较。

代码:

  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <algorithm>
  4. using namespace std;
  5. #define N 200050
  6. inline char nc() {
  7. static char buf[100000],*p1,*p2;
  8. return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;
  9. }
  10. inline int rd() {
  11. register int x=0;
  12. register char s=nc();
  13. while(s<'0'||s>'9') s=nc();
  14. while(s>='0'&&s<='9') x=(x<<3)+(x<<1)+s-'0',s=nc();
  15. return x;
  16. }
  17. int t[N*25],ls[N*25],rs[N*25],n,m,a[N],cnt,root[N];
  18. void insert(int x,int &y,int l,int r,int v,int w) {
  19. y=++cnt;
  20. if(l==r) {
  21. t[y]=w; return ;
  22. }
  23. int mid=(l+r)>>1;
  24. if(v<=mid) rs[y]=rs[x],insert(ls[x],ls[y],l,mid,v,w);
  25. else ls[y]=ls[x],insert(rs[x],rs[y],mid+1,r,v,w);
  26. t[y]=min(t[ls[y]],t[rs[y]]);
  27. }
  28. int query(int x,int l,int r,int v) {
  29. if(l==r) return l;
  30. int mid=(l+r)>>1;
  31. if(t[ls[x]]<v) return query(ls[x],l,mid,v);
  32. else return query(rs[x],mid+1,r,v);
  33. }
  34. int main() {
  35. n=rd(); m=rd();
  36. int i,x,y;
  37. for(i=1;i<=n;i++) {
  38. a[i]=rd(); a[i]=min(a[i],n);
  39. insert(root[i-1],root[i],0,n,a[i],i);
  40. }
  41. for(i=1;i<=m;i++) {
  42. x=rd(); y=rd();
  43. printf("%d\n",query(root[y],0,n,x));
  44. }
  45. }

BZOJ_3585_mex && BZOJ_3339_Rmq Problem_主席树的更多相关文章

  1. BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块

    BZOJ_3585_mex && BZOJ_3339_Rmq Problem_莫队+分块 Description 有一个长度为n的数组{a1,a2,...,an}.m次询问,每次询问一 ...

  2. bzoj3207--Hash+主席树

    题目大意: 给定一个n个数的序列和m个询问(n,m<=100000)和k,每个询问包含k+2个数字:l,r,b[1],b[2]...b[k],要求输出b[1]~b[k]在[l,r]中是否出现. ...

  3. bzoj1901--树状数组套主席树

    树状数组套主席树模板题... 题目大意: 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i+2]--a[ ...

  4. BZOJ 3626: [LNOI2014]LCA [树链剖分 离线|主席树]

    3626: [LNOI2014]LCA Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2050  Solved: 817[Submit][Status ...

  5. BZOJ 1146: [CTSC2008]网络管理Network [树上带修改主席树]

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3522  Solved: 1041[Submi ...

  6. BZOJ 2588: Spoj 10628. Count on a tree [树上主席树]

    2588: Spoj 10628. Count on a tree Time Limit: 12 Sec  Memory Limit: 128 MBSubmit: 5217  Solved: 1233 ...

  7. BZOJ 1901: Zju2112 Dynamic Rankings[带修改的主席树]【学习笔记】

    1901: Zju2112 Dynamic Rankings Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 7143  Solved: 2968[Su ...

  8. [bzoj3932][CQOI2015][任务查询系统] (主席树)

    Description 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si ...

  9. [bzoj2588][count on a tree] (主席树+lca)

    Description 给定一棵N个节点的树,每个点有一个权值,对于M个询问(u,v,k),你需要回答u xor lastans和v这两个节点间第K小的点权.其中lastans是上一个询问的答案,初始 ...

随机推荐

  1. 分割url

    $(document).ready(function () { var spurl = document.location.toString().split("/"); //把ur ...

  2. 使用jdk8 stream 统计单词数

    在我的SpringBoot2.0不容错过的新特性 WebFlux响应式编程里面,有同学问如何使用stream统计单词数.这是个好例子,也很典型,在这里补上. 下面的例子实现了从一个文本文件读取(英文) ...

  3. sudoku solver(数独)

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  4. valid sudoku(数独)

    Determine if a Sudoku is valid, according to: Sudoku Puzzles - The Rules. The Sudoku board could be ...

  5. linux命令TOP参数load average详解[转]

    我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别记录了一分钟.五分钟.以及十五分钟的系统平均负载……我们知道判断一个系统的负载可以使用top,uptime等命令去查看,它分别 ...

  6. 7. Selenium的基本使用

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 32.0px "PingFang SC" } span.s1 { font: 32.0p ...

  7. Day20 Django的使用_基础

    老师网址: https://www.cnblogs.com/yuanchenqi/articles/7652353.html 1,复习上级课,一对一,一对多,多对多的使用 models.py: cla ...

  8. Mybatis 系列2

    上篇文章 写了一个Demo简单体现了一下Mybatis的流程.本次,将简单介绍一下Mybatis的配置文件: 上次例子中,我们以 SqlSessionFactoryBuilder 去创建 SqlSes ...

  9. [ SSH框架 ] Struts2框架学习之一

    一.Struts2框架的概述 Struts2是一种基于MVC模式的轻量级Web框架,它自问世以来,就受到了广大Web开发者的关注,并广泛应用于各种企业系统的开发中.目前掌握 Struts2框架几乎成为 ...

  10. 爬虫初探--PHP

    我有收藏的cms网站,偶尔会下载一些资源,老司机都懂的:-D.然后有一次好几天没上,堆了好些没弄,心想:cao,这好麻烦啊,能不能写个脚本自动帮我搞?然后忽然就想到,这是不是就是所谓的爬虫呢?心中一阵 ...