【BZOJ3524】Couriers,第一次的主席树
传送门(权限)
题面
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,第一次的主席树相关推荐
- SPOJ DQUERY 求区间内不同数的个数 主席树
这题跟HDU3333差不多吧. 离线的做法很简单,不再说了 以前做过. 主席树的做法就比较暴力了.. 什么是主席树呢.. 其实是某种称号. 在该题中的体现是可持久化的线段树. 对于一个数 如果以前没出 ...
- 【bzoj3524】Couriers——主席树
Description 给一个长度为n的序列a.1≤a[i]≤n(n,m<=500000). m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2. ...
- 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
[pixiv] https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62485671 向大(hei)佬(e)势力学(di ...
- 主席树【bzoj3524(p3567)】[POI2014]Couriers
Description 给一个长度为n的序列a.1≤a[i]≤n. m组询问,每次询问一个区间[l,r],是否存在一个数在[l,r]中出现的次数大于(r-l+1)/2.如果存在,输出这个数,否则输出0 ...
- bzoj3524: [Poi2014]Couriers / bzoj2223: [Coci 2009]PATULJCI 主席树
主席树模板题目 #include<bits/stdc++.h> using namespace std; int root[500010],a[500010],hash[500010],d ...
- BZOJ 3524: [Poi2014]Couriers【主席树】
3524: [Poi2014]Couriers [题目描述] 传送门 [题解] 主席树的裸题,要找出现次数大于一半的,那么他肯定出现在当前的左子树或右子树中,就这样查找就可以了. 代码如下 #incl ...
- BZOJ.3524.[POI2014]Couriers(主席树)
题目链接 //119964kb 5780ms //主席树裸题啊.. #include <cstdio> #include <cctype> #define gc() getch ...
- 主席树 ---- CodeForces - 813E(主席树,固定一端去考虑情况)
第一道主席树题目. 题意:给定N个数,以及Q个询问,每个询问给出[L,R] 现在问在这个区间选最多的数,使得每个数出现次数不能大于K,强制在线. 主席树每个节点维护的是该位置上的数是否是k之内的数 这 ...
- 【以前的空间】主席树
主席树 周五晚蔡大神讲了下,觉得不是很难的东西,然后就可是敲,发现好像就是个持久化线段树(?!) 当晚笔记: 主席树,其实就是多棵可持久化权值线段树 那什么是可持久化线段树呢? 如树1中就在子树i,树 ...
最新文章
- 市场营销OKR模板推荐,有哪些最新的OKR模板?
- 还不知道BeanFactory和ApplicationContext的区别?
- 如何在客户端发送ajax请求,ajax - 从服务器(nodejs)发送数据到客户端(ajax请求)
- C# 中常用数据类型与控件类型的命名规则
- 背英语单词很困难,不妨学习一下词根词缀吧(每天10个词根、词缀)Part 1
- 二叉树C++ | 广度优先遍历(层级顺序遍历)_2
- 微信公众号模板消息 access_token missing
- 简单实用的带引脚保护的RS232驱动电路
- linux ps2鼠标驱动,a1657苹果鼠标驱动 最新版:VoodooPS2Controller v1.9
- 如何批量缩小图片尺寸大小?
- java实现wps函数IRR_ORACLE SQL 实现IRR的计算
- php单引号的作用,PHP中单引号和双引号的区别与作用
- 计算机维修与数据恢复论文,备份恢复论文,关于计算机数据备份数据恢复技术相关参考文献资料-免费论文范文...
- Place Holder 方法
- 回撤率 python_最大回撤和最大回撤率的区别?
- 条件随机场(Conditional random field,CRF)
- 假如有人把支付宝存储服务器炸了,我们的钱还在吗?
- 使用layer.open打开自定义弹窗,获取表单内容发送到后端
- 浮点数单双精度输出位数
- 万用表怎么测量电池容量_万用表怎么检测电池容量_电池电量
热门文章
- C# 属性、索引器(二)
- 红橙Darren视频笔记 OKHttp基本使用 对http框架进行封装 链式调用
- 高等组合学笔记(十一):分拆与Gauss二项式系数,恒等式与展开式
- fpga 峰值采样_FPGA开发者都喜欢用的通用高性能电源解决方案
- rgb颜色查询工具_Web前端页面重构之工具篇(Photoshop)
- 生活质量衡量系统_一文看懂质量管理精髓——“零缺陷”管理
- [Spark] - HashPartitioner RangePartitioner 区别
- windows 2008 终端服务器配置,windows 2008终端服务器设置
- oracle还原 ora 39111,在server2008上进行impdp引发的(ORA-39070)的问题
- redlock java_分布式Redis的分布式锁Redlock