传送门(权限)
题面
3524: [Poi2014]Couriers

Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 1449 Solved: 508
[Submit][Status][Discuss]
Description

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

Input

第一行两个数n,m。
第二行n个数,a[i]。
接下来m行,每行两个数l,r,表示询问[l,r]这个区间。

Output

m行,每行对应一个答案。

Sample Input

7 5

1 1 3 2 3 4 3

1 3

1 4

3 7

1 7

6 6

Sample Output

1

0

3

0

4

HINT

【数据范围】

n,m≤500000

写在前面:千里之行始于足下
思路:板子题,感谢Yveh的无私帮助!
注意:主席树要小心M啊!
代码:

#include<bits/stdc++.h>
#define M 500000
using namespace std;
int n,m,tot,cnt=1;
int data[M+10],root[M+10];
struct Chairman_tree
{int ch[2],siz;
}a[M*20];
void build(int now,int L,int R,int rt,int val)
{a[rt].siz=a[now].siz+1;if (L==R) return;int mid=(L+R)>>1;if (val<=mid)a[rt].ch[1]=a[now].ch[1],a[rt].ch[0]=++tot,build(a[now].ch[0],L,mid,a[rt].ch[0],val);elsea[rt].ch[0]=a[now].ch[0],a[rt].ch[1]=++tot,build(a[now].ch[1],mid+1,R,a[rt].ch[1],val);
}
int get(int begin,int end,int L,int R,int k,int len)
{if (begin==end)if (a[R].siz-a[L].siz>len) return end;else return 0;int mid=(begin+end)>>1,t=a[a[R].ch[0]].siz-a[a[L].ch[0]].siz;if (t>=k)return get(begin,mid,a[L].ch[0],a[R].ch[0],k,len);elsereturn get(mid+1,end,a[L].ch[1],a[R].ch[1],k-t,len);
}
main()
{scanf("%d%d",&n,&m);for (int i=0;i<=n;i++) root[i]=++tot;for (int i=1;i<=n;i++){scanf("%d",data+i);build(root[i-1],1,n,root[i],data[i]);}int x,y;while (m--){scanf("%d%d",&x,&y);printf("%d\n",get(1,n,root[x-1],root[y],(y-x+1>>1)+1,y-x+1>>1));}
}

【BZOJ3524】Couriers,第一次的主席树相关推荐

  1. SPOJ DQUERY 求区间内不同数的个数 主席树

    这题跟HDU3333差不多吧. 离线的做法很简单,不再说了 以前做过. 主席树的做法就比较暴力了.. 什么是主席树呢.. 其实是某种称号. 在该题中的体现是可持久化的线段树. 对于一个数 如果以前没出 ...

  2. 【bzoj3524】Couriers——主席树

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

  3. 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题

    [pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...

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

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

  5. bzoj3524: [Poi2014]Couriers / bzoj2223: [Coci 2009]PATULJCI 主席树

    主席树模板题目 #include<bits/stdc++.h> using namespace std; int root[500010],a[500010],hash[500010],d ...

  6. BZOJ 3524: [Poi2014]Couriers【主席树】

    3524: [Poi2014]Couriers [题目描述] 传送门 [题解] 主席树的裸题,要找出现次数大于一半的,那么他肯定出现在当前的左子树或右子树中,就这样查找就可以了. 代码如下 #incl ...

  7. BZOJ.3524.[POI2014]Couriers(主席树)

    题目链接 //119964kb 5780ms //主席树裸题啊.. #include <cstdio> #include <cctype> #define gc() getch ...

  8. 主席树 ---- CodeForces - 813E(主席树,固定一端去考虑情况)

    第一道主席树题目. 题意:给定N个数,以及Q个询问,每个询问给出[L,R] 现在问在这个区间选最多的数,使得每个数出现次数不能大于K,强制在线. 主席树每个节点维护的是该位置上的数是否是k之内的数 这 ...

  9. 【以前的空间】主席树

    主席树 周五晚蔡大神讲了下,觉得不是很难的东西,然后就可是敲,发现好像就是个持久化线段树(?!) 当晚笔记: 主席树,其实就是多棵可持久化权值线段树 那什么是可持久化线段树呢? 如树1中就在子树i,树 ...

最新文章

  1. 市场营销OKR模板推荐,有哪些最新的OKR模板?
  2. 还不知道BeanFactory和ApplicationContext的区别?
  3. 如何在客户端发送ajax请求,ajax - 从服务器(nodejs)发送数据到客户端(ajax请求)
  4. C# 中常用数据类型与控件类型的命名规则
  5. 背英语单词很困难,不妨学习一下词根词缀吧(每天10个词根、词缀)Part 1
  6. 二叉树C++ | 广度优先遍历(层级顺序遍历)_2
  7. 微信公众号模板消息 access_token missing
  8. 简单实用的带引脚保护的RS232驱动电路
  9. linux ps2鼠标驱动,a1657苹果鼠标驱动 最新版:VoodooPS2Controller v1.9
  10. 如何批量缩小图片尺寸大小?
  11. java实现wps函数IRR_ORACLE SQL 实现IRR的计算
  12. php单引号的作用,PHP中单引号和双引号的区别与作用
  13. 计算机维修与数据恢复论文,备份恢复论文,关于计算机数据备份数据恢复技术相关参考文献资料-免费论文范文...
  14. Place Holder 方法
  15. 回撤率 python_最大回撤和最大回撤率的区别?
  16. 条件随机场(Conditional random field,CRF)
  17. 假如有人把支付宝存储服务器炸了,我们的钱还在吗?
  18. 使用layer.open打开自定义弹窗,获取表单内容发送到后端
  19. 浮点数单双精度输出位数
  20. 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量

热门文章

  1. C# 属性、索引器(二)
  2. 红橙Darren视频笔记 OKHttp基本使用 对http框架进行封装 链式调用
  3. 高等组合学笔记(十一):分拆与Gauss二项式系数,恒等式与展开式
  4. fpga 峰值采样_FPGA开发者都喜欢用的通用高性能电源解决方案
  5. rgb颜色查询工具_Web前端页面重构之工具篇(Photoshop)
  6. 生活质量衡量系统_一文看懂质量管理精髓——“零缺陷”管理
  7. [Spark] - HashPartitioner RangePartitioner 区别
  8. windows 2008 终端服务器配置,windows 2008终端服务器设置
  9. oracle还原 ora 39111,在server2008上进行impdp引发的(ORA-39070)的问题
  10. redlock java_分布式Redis的分布式锁Redlock