n<=500000个数,m<=500000个询问,每次问区间里出现次数>(R-L+1)的数字是谁,没有输出0.

写了带修改发现不会不带修改了。。。。

不带修改的话,n个点,每个点表示一个前缀,每加入一个数时,主席树上只有logn个节点的信息,所以每次只用新建logn个节点,那前缀对应线段树里其他的信息呢?直接接到上一棵树即可。详见代码或其他博客。

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<algorithm>
  4. #include<stdlib.h>
  5. //#include<iostream>
  6. using namespace std;
  7.  
  8. int n,m;
  9. #define maxn 500011
  10. #define maxm 10000011
  11. struct SMT
  12. {
  13. struct Node
  14. {
  15. int son[];
  16. int cnt;
  17. }a[maxm];
  18. int size,n;
  19. void clear(int m) {n=m;size=;a[].cnt=;}
  20. void up(int x)
  21. {
  22. const int &p=a[x].son[],&q=a[x].son[];
  23. a[x].cnt=a[p].cnt+a[q].cnt;
  24. }
  25. void build(int pre,int &rt,int L,int R,int num)
  26. {
  27. rt=++size;
  28. a[rt].cnt=a[pre].cnt+;
  29. if (L==R) {a[rt].son[]=a[rt].son[]=;return;}
  30. const int mid=(L+R)>>;
  31. if (num<=mid) build(a[pre].son[],a[rt].son[],L,mid,num),a[rt].son[]=a[pre].son[];
  32. else build(a[pre].son[],a[rt].son[],mid+,R,num),a[rt].son[]=a[pre].son[];
  33. }
  34. void build(int pre,int &rt,int num) {build(pre,rt,,n,num);}
  35. }smt;
  36.  
  37. int a[maxn],b[maxn],rt[maxn],lb;
  38. int main()
  39. {
  40. scanf("%d%d",&n,&m);
  41. for (int i=;i<=n;i++) scanf("%d",&a[i]),b[i]=a[i];
  42. sort(b+,b++(lb=n));lb=unique(b+,b++lb)-b-;
  43. for (int i=;i<=n;i++) a[i]=lower_bound(b+,b++lb,a[i])-b;
  44.  
  45. smt.clear(lb);
  46. for (int i=;i<=n;i++) smt.build(rt[i-],rt[i],a[i]);
  47. for (int i=,x,y;i<=m;i++)
  48. {
  49. scanf("%d%d",&x,&y);x--;
  50. int sa=rt[x],sb=rt[y],L=,R=lb;bool ok=;
  51. while (L<R)
  52. {
  53. if (smt.a[smt.a[sb].son[]].cnt-smt.a[smt.a[sa].son[]].cnt>(y-x)/)
  54. sa=smt.a[sa].son[],sb=smt.a[sb].son[],R=(L+R)>>;
  55. else if (smt.a[smt.a[sb].son[]].cnt-smt.a[smt.a[sa].son[]].cnt>(y-x)/)
  56. sa=smt.a[sa].son[],sb=smt.a[sb].son[],L=((L+R)>>)+;
  57. else {ok=;break;}
  58. }
  59. if (ok) printf("%d\n",b[L]);
  60. else puts("");
  61. }
  62. return ;
  63. }

主席树初探--BZOJ3524: [Poi2014]Couriers的更多相关文章

  1. [BZOJ2223][BZOJ3524][Poi2014]Couriers 主席树

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2436  Solved: 960[Submit][St ...

  2. bzoj3524: [Poi2014]Couriers(主席树)

    主席树(可持久化权值线段树)初探... 修改一个点只对树上logn个点有影响,所以新建logn个点就行了,总共新建mlogn个点. 查询一个区间[l,r],相当于将数一个一个加进树,询问第l到第r次操 ...

  3. BZOJ3524[Poi2014]Couriers——主席树

    题目描述 给一个长度为n的序列a.1≤a[i]≤n.m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入 第一行 ...

  4. BZOJ3524: [Poi2014]Couriers(主席树)

    题意 题目链接 Sol 严格众数只会出现一次,那么建出主席树,维护子树siz,直接在树上二分即可 #include<bits/stdc++.h> #define LL long long ...

  5. 主席树【bzoj3524(p3567)】[POI2014]Couriers

    Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...

  6. BZOJ3524 [Poi2014]Couriers 【主席树】

    题目 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0. 输入格式 第一 ...

  7. 主席树||可持久化线段树||BZOJ 3524: [Poi2014]Couriers||BZOJ 2223: [Coci 2009]PATULJCI||Luogu P3567 [POI2014]KUR-Couriers

    题目:[POI2014]KUR-Couriers 题解: 要求出现次数大于(R-L+1)/2的数,这样的数最多只有一个.我们对序列做主席树,每个节点记录出现的次数和(sum).(这里忽略版本差值问题) ...

  8. bzoj3524 [Poi2014]Couriers/2223 [Coci 2009]PATULJCI

    题目链接1 题目链接2 主席树模板题 两题有细节不同 #include<algorithm> #include<iostream> #include<cstdlib> ...

  9. 主席树初探--BZOJ1901: Zju2112 Dynamic Rankings

    n<=10000的序列做m<=10000个操作:单点修改,查区间第k小. 所谓的主席树也就是一个值域线段树嘛..不过在这里还是%%fotile 需要做一个区间查询,由于查第k小,需要一些能 ...

随机推荐

  1. 417 Pacific Atlantic Water Flow 太平洋大西洋水流

    详见:https://leetcode.com/problems/pacific-atlantic-water-flow/description/ C++: class Solution { publ ...

  2. [转]mysql日志详细解析

    转自:http://pangge.blog.51cto.com/6013757/1319304 MySQL日志: 主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据 ...

  3. Xml学习笔记(1)

    不同的xml文档构可能要用到不同的方法进行解析这里用到的是例如<student name="张三" id="1" sex="男"/&g ...

  4. git ---合并和删除分支

    git merge  分支名 //合并子分支到当前分支 git branch -d 分支名//删除分支

  5. install nginx error

    the error info : the HTTP gzip module requires the zlib library.You can either disable the module by ...

  6. -webkit/IE/Firefox的一些样式

    仅限于-webkit的样式特效:-webkit-overflow-scrolling:touch;滚动时回弹效果:如果出现偶尔卡住不动的情况,那么在使用该属性的元素上不设置定位或者手动设置定位为sta ...

  7. webgl推荐书籍

    网址:https://www.douban.com/doulist/45940373/ webgl 来自: Pasu2017-04-17创建   2017-07-25更新   推荐 关注 2 人关注 ...

  8. vue动态加载组件

    vue动态加载组件,可以使用以下方式 <component :is="propertyname" v-for="tab in tabs"></ ...

  9. CAD控件使用教程 自定义实体的实现

    自定义实体的实现 1 .       自定义实体... 3 1.1      说明... 3 1.2      类的类型信息... 3 1.3      worldDraw.. 4 1.4      ...

  10. D2. Toy Train

    D2. Toy Train time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...