poj 2274 The Race 最小堆】的更多相关文章

题目链接 题目大意: 给n个小车, 每个小车有一个初始位置x和初始速度v, 保证x1 < x2..... <xn. 0<v<100. 然后问你一共会发生多少次超车, 以及前10000次超车分别是哪两辆车, 按超车的时间顺序给出. 思路: 第一问显然就是一个逆序数, 因为v<100, 所以暴力统计就可以了. 第二问, 我们通过观察可以得出一个性质, 超车总是先发生在相邻的两辆车. 比如a, b, c三个车, 如果他们的速度是va > vc > vb, 那么超车肯定是…
题目链接:http://poj.org/problem?id=2051 ///维持最小堆(优先队列)POJ2051 #include <iostream> #include <string> using namespace std; struct Node { int Now; ///出堆的时间 int id; int p; ///时间间隔 }; Node node []; int K; ///输出个数 void down (Node H[],int s,int m) { ///向…
在讲解PriorityQueue之前,需要先熟悉一个有序数据结构:最小堆. 最小堆是一种经过排序的完全二叉树,其中任一非终端节点数值均不大于其左孩子和右孩子节点的值. 可以得出结论,如果一棵二叉树满足最小堆的要求,那么,堆顶(根节点)也就是整个序列的最小元素. 最小堆的例子如下图所示:…
#include<iostream>#include<vector>#include<math.h>#include<string>#include<algorithm>using namespace std;#include<map>#include<stack>#include<unordered_set>#include<string.h>#include<queue>struct…
堆:实质是一颗完全二叉树,最大堆的特点:父节点值均大于子节点:最小堆的父节点值均小于子节点: 一般使用连续内存存储堆内的值,因而可以根据当前节点的索引值推断子节点的索引值: 节点i的父节点为(i-1)/2: 节点j的左子结点:j * 2 + 1; 节点j的右子结点:j * 2 + 2; 以下代码实现了最大堆最小堆,当比较函数使用std::greater,得到最大堆,当比较函数使用std::less得到最小堆: 代码及测试用例如下: //最大最小堆 //MaxMinHeap.h #pragma o…
今天看Python CookBook中关于“求list中最大(最小)的N个元素”的内容,介绍了直接使用python的heapq模块的nlargest和nsmallest函数的解决方式,记得学习数据结构的时候有个堆排序算法,所以顺便研究了一下“堆”结构(这里特指二叉堆). 概念 所谓二叉堆(binary heap)实际上就是一颗特殊的完全二叉树,其特殊性在于: 二叉树中所有的父节点的值都不大于/不小于其子节点: 根节点的值必定是所有节点中最小/最大的. 父节点值不大于子节点且根节点值最小称为最小堆…
Google面试题 股市上一个股票的价格从开市开始是不停的变化的,需要开发一个系统,给定一个股票,它能实时显示从开市到当前时间的这个股票的价格的中位数(中值). SOLUTION 1: 1.维持两个heap,一个是最小堆,一个是最大堆. 2.一直使maxHeap的size大于minHeap. 3. 当两边size相同时,比较新插入的value,如果它大于minHeap的最大值,把它插入到minHeap.并且把minHeap的最小值移动到maxHeap. ...具体看代码 /***********…
听说有一种最小(大)堆,不限于是完全二叉树,而是完全D叉树,名为D-ary Heap(http://en.wikipedia.org/wiki/D-ary_heap).D可以是1,2,3,4,100,对于优先队列该有的功能都没有问题. 动手写一个D-ary Heap,应该不难.简单起见,不考虑像STL一样通过template传入Comp类,下面的实现要求T类型重载了operator <和operator >. template<class T> class DaryHeap { s…
感谢:http://blog.csdn.net/mishifangxiangdefeng/article/details/7668486 声明:供自己学习之便而收集整理 题目:请给出一个时间为O(nlgk).用来将k个已排序链表合成一个排序链表算法.此处n为所有输入链表中元素的总数.(提示:用一个最小堆来做k路合并) 算法: step1:取每个链表的第一个元素,构造成一个含有k个元素的堆 step2:把根结点的值记入排序结果中. step3:判断根结点所在的链表,若该链表为空,则go to st…
二叉堆(以最小堆为例),其具有结构性质和堆序性质结构性质: 堆是一棵完全的二叉树,一颗高为h的完全二叉树有2^h到2^h-1个节点,高度为log N            而且该结构可以很容易的使用数组来表示:对于数组中任一位置i上的元素,其左儿子在位置2i上,右儿子在2i+1,其父节点在[x/2]处堆序性质:在一个堆中,对于每一个节点X,X的父亲中的关键字小于或等于X中的关键字          也就是说:最小元总可以在根处找到 主要的操作为插入和删除: 以数组存储为例,算法在代码中体现: /…