HDU2665_Kth number
给一个数组,求区间[l,r]中第k大的数。
今天被各种数据结构虐爆了,自己还是需要学习一下函数式线段树的,这个东西好像还挺常用。
函数式线段树的思想是这样的,对于每个时间状态,我们都建立一颗线段树,查询两个状态在某个区间的差的话,我们只要找到两个状态分别对应的点相减即可。
由于每次我使用线段树更新的时候,一路向下,所以我所涉及的更新的节点数量也只有log个,为了不改变原来的状态,可以选择新建这些节点。
这样所有的节点数量也不会超过n*log()个了。
对于此题,按照数组的顺序从左到右依次加入到线段树中,对于每个数组的位置都建立了一颗线段树,那么查找对于区间[l,r]的数字个数,我们只需要沿着两树的根节点一直往下面判断就可以了,每次判断两颗数的左二子数量相差是否大于K即可,也就是对于当前选择左走还是右走了,最终到达的点就是要找的那个第K大值了。
第一次使用 unique()和lower_bound(),内牛满面啊。 T_T !!!!!
召唤代码君:
- #include <iostream>
- #include <cstring>
- #include <cstdio>
- #include <algorithm>
- #define maxn 22222222
- using namespace std;
- int L[maxn],R[maxn],sum[maxn];
- int N,n,m,T;
- int a[maxn],lisan[maxn],b[maxn],cnt;
- void build(int l,int r,int& p)
- {
- p=++N; sum[p]=;
- if (l==r) return;
- int mid=(l+r)>>;
- build(l,mid,L[p]);
- build(mid+,r,R[p]);
- }
- void update(int pre,int& p,int l,int r,int x)
- {
- p=++N;
- L[p]=L[pre],R[p]=R[pre],sum[p]=sum[pre]+;
- if (l==r) return;
- int mid=(l+r)>>;
- if (x<=mid) update(L[pre],L[p],l,mid,x);
- else update(R[pre],R[p],mid+,r,x);
- }
- int query(int u,int v,int l,int r,int k)
- {
- if (l==r) return l;
- int mid=(l+r)>>,num=sum[L[v]]-sum[L[u]];
- if (num>=k) return query(L[u],L[v],l,mid,k);
- else return query(R[u],R[v],mid+,r,k-num);
- }
- int main()
- {
- scanf("%d",&T);
- while (T--)
- {
- scanf("%d%d",&n,&m);
- N=;
- for (int i=; i<=n; i++) scanf("%d",&a[i]),lisan[i]=a[i];
- sort(lisan+,lisan++n);
- cnt=unique(lisan+,lisan++n)-lisan-;
- build(,cnt,b[]);
- for (int i=; i<=n; i++)
- {
- int tmp=lower_bound(lisan+,lisan++cnt,a[i])-lisan;
- update(b[i-],b[i],,cnt,tmp);
- }
- while (m--)
- {
- int l,r,k;
- scanf("%d%d%d",&l,&r,&k);
- int pos=query(b[l-],b[r],,cnt,k);
- printf("%d\n",lisan[pos]);
- }
- }
- return ;
- }
HDU2665_Kth number的更多相关文章
- JavaScript Math和Number对象
目录 1. Math 对象:数学对象,提供对数据的数学计算.如:获取绝对值.向上取整等.无构造函数,无法被初始化,只提供静态属性和方法. 2. Number 对象 :Js中提供数字的对象.包含整数.浮 ...
- Harmonic Number(调和级数+欧拉常数)
题意:求f(n)=1/1+1/2+1/3+1/4-1/n (1 ≤ n ≤ 108).,精确到10-8 (原题在文末) 知识点: 调和级数(即f(n))至今没有一个完全正确的公式, ...
- Java 特定规则排序-LeetCode 179 Largest Number
Given a list of non negative integers, arrange them such that they form the largest number. For exam ...
- Eclipse "Unable to install breakpoint due to missing line number attributes..."
Eclipse 无法找到 该 断点,原因是编译时,字节码改变了,导致eclipse无法读取对应的行了 1.ANT编译的class Eclipse不认,因为eclipse也会编译class.怎么让它们统 ...
- 移除HTML5 input在type="number"时的上下小箭头
/*移除HTML5 input在type="number"时的上下小箭头*/ input::-webkit-outer-spin-button, input::-webkit-in ...
- iOS---The maximum number of apps for free development profiles has been reached.
真机调试免费App ID出现的问题The maximum number of apps for free development profiles has been reached.免费应用程序调试最 ...
- 有理数的稠密性(The rational points are dense on the number axis.)
每一个实数都能用有理数去逼近到任意精确的程度,这就是有理数的稠密性.The rational points are dense on the number axis.
- [LeetCode] Minimum Number of Arrows to Burst Balloons 最少数量的箭引爆气球
There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...
- [LeetCode] Number of Boomerangs 回旋镖的数量
Given n points in the plane that are all pairwise distinct, a "boomerang" is a tuple of po ...
随机推荐
- java多线程系列(二)---对象变量并发访问
对象变量的并发访问 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我 ...
- 2018年美国大学生数学建模竞赛(MCM/ICM) 比赛心得
话不多说,题目先上: 这是我们这次选择的题目,说说建模的那些事! 美赛的时间和国赛挑战杯时间略有不同,貌似多的一天是为了让我们对文章进行一个翻译吧QAQ 建议参加美赛的同学可以参照此计划进行 Day0 ...
- (一)Hyperledger Fabric 1.1安装部署-基础环境搭建
在学习和开发hyperledger fabric的时候遇到了一些坑,现将自己的一些总结和心得整理如下,以期对大家有所帮助.本次使用的宿主机环境:ubuntu,版本:Ubuntu 16.04.3 LTS ...
- php在数组中判断某个值是否存在
php在数组中查找指定值是否存在的方法有很多,记得很久以前我一直都是傻傻的用foreach循环来查找的,下面我主要分享一下用php内置的三个数组函数来查找指定值是否存在于数组中,这三个数组分别是 in ...
- paste命令详解
基础命令学习目录首页 原文链接:https://blog.csdn.net/u011341352/article/details/52806312 个人分类: linux paste命令和cut命 ...
- Redis学习(一):CentOS下redis安装和部署
1.基础知识 redis是用C语言开发的一个开源的高性能键值对(key-value)数据库.它通过提供多种键值数据类型来适应不同场景下的存储需求,目前为止redis支持的键值数据类型如下字符串.列表 ...
- 王者荣耀交流协会final发布-第一次scrum立会
1.例会照片 成员王超,高远博,冉华,王磊,王玉玲,任思佳,袁玥全部到齐 master:袁玥 2.时间跨度 2017年12月1日 17:00 — 17:31,总计31分钟 3.地点 一食堂二楼沙发座椅 ...
- 学习Mybatis的两个必须的jar包分享
百度云盘:http://pan.baidu.com/s/1nuNxRcd 提取码:t765(好像不需要提取码,不太会用云盘...) 自己学习mybatis的时候去找这两个jar包也是不容易,特别分享一 ...
- 《Spring1之第五次站立会议》
<第五次站立会议> 昨天:试着做了一下主框架里的在线人数的显示代码: 今天:向小伙伴们请教了我代码的错误的解决方法以及对TCP/IP协议进行了相关的了解. 遇到的问题:虽然基本原理不难理解 ...
- wcf的DataContractAttribute与DataMenmberAttribute
文章:序列化和反序列化的几种方式(DataContractSerializer)(二) 介绍了序列化控制细节.哪些字段可以序列化,序列化后这些字段的名字.