题目大意:有N头牛,每头牛两个权值,A和B。从这N头牛中选取C头牛,使得:
1、这些牛中A权值的中位数尽量大。
2、这些牛的B权值的和小于题中所给的F
输出这个最大的A权值的中位数;如果没有满足题意的解,就输出-1。值。
思路:
堆有一个神奇的功能。假设上图是一个数组,在B从A到C移动的过程中,利用大根堆可以维护出B在所有位置时,从A到B中选K个值...
分类:
其他好文 时间:
2014-09-04 19:14:30
阅读次数:
238
大根堆排序的基本思想: 1) 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区; 2) 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换, 由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key; 3) 由于交换...
分类:
其他好文 时间:
2014-08-30 20:22:29
阅读次数:
168
Enemy Double Queue!
题目大意:维护一种数据结构,支持以下操作:
1.插入一个值
2.查询最大值并删除
3.查询最小值并删除
元素的值
这数据结构一看就是堆。。。不过堆结构不能同时维护最大值和最小值,于是我们开两个堆,一个大根堆,一个小根堆
其中一堆删除时,另一堆也要删除相应元素
于是删除的话有两种方法
1.映射 1000W开数组映射妥妥MLE 于是我们在两个堆...
分类:
其他好文 时间:
2014-08-29 18:28:18
阅读次数:
277
堆的概念。 n个关键字序列Kl,K2,…,Kn称为堆,当且仅当该序列满足如下性质(简称为堆性质): (1) ki≤K2i且ki≤K2i+1 或(2)Ki≥K2i且ki≥K2i+1(1≤i≤ ) 满足(1)的称为小根堆,满足(2)的称为大根堆。 若将此序列所存储的向量R[1..n]看做是一棵完全二叉树的存储结构,则堆实质上是满足如下性质的完全二叉树:树中任一非叶结点...
分类:
其他好文 时间:
2014-08-20 16:22:02
阅读次数:
229
1.小根堆
若根节点存在左子女则根节点的值小于左子女的值;若根节点存在右子女则根节点的值小于右子女的值。
2.大根堆
若根节点存在左子女则根节点的值大于左子女的值;若根节点存在右子女则根节点的值大于右子女的值。
3.结论
(1)堆是一棵完全二叉树(如果公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。
(2)小根堆的根节点的值是最小值,大根堆的根节点的值是最大值。
(3)...
分类:
其他好文 时间:
2014-08-12 13:35:44
阅读次数:
319
题意:排序输出:在先满足定约束条件下(如 3必需在1前面,7必需在4前面),在满足:1尽量前,其次考虑2,依次。。。。。(即有次约束)。
开始的时候,只用拓扑,然后每次在都可以选的时候,优先考虑小的,其实没什么简单,如 图(3-->1,2)这样输出是2.3.1,正确应该是 3 1 2,因为 1要尽量前(都满足第一约束)。
参考他人思路结合自己理解:因为这样的弊端就是没有考虑这种情况:图中:若我...
分类:
其他好文 时间:
2014-07-26 17:16:52
阅读次数:
280
堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。(1)用大根堆排序的基本思想① 先将初始文件R[1..n]建成一个大根堆,此堆为初始的无序区② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由...
分类:
其他好文 时间:
2014-07-11 19:45:59
阅读次数:
136
实际上和大多这类题一样(比如wikioi上的地鼠游戏),考察的都是堆的操作这次改完之后就算把堆的模版定下来了悲剧的是:大根堆打成了小根堆,导致一开始一直是10分……按结束时间排序,(经过验证,结束时间相同的建筑不需要在根据t的大小来排序)如果time+t[i]>1; 8 while k>=1 ...
分类:
Web程序 时间:
2014-06-21 16:02:49
阅读次数:
352
介绍:二叉排序树是以一定的规则排列树中元素,因而可以进行快速的排序和查询的树状数据结构,一般规则是:对于树中任意一个节点,左孩子严格小于根,根严格小于右孩子,有点像大根堆。(只是大根堆中左右孩子关系并不确定,且和根的关系是统一的,而且有上浮和下沉操作使得大根堆总是一棵完全二叉树,其不断弹出堆顶形成有序列的过程叫做堆排序。虽然二叉排序树中也有旋转操作使得树尽量平衡,但是由于数值大小分明的左右孩子,在...
分类:
其他好文 时间:
2014-06-03 01:01:17
阅读次数:
313
#includeusing namespace std;//大根堆,从小到达排序int
a[101];void swap(int &a,int &b){ a=a^b; b=a^b; a=a^b; }void adjust(int
*a,int root,int len){ int max=root;...
分类:
其他好文 时间:
2014-05-19 15:13:43
阅读次数:
219