堆排序介绍 堆排序是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。 可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。 什么是完全二叉树呢?还有满二叉树又是怎么的一种二叉树呢?还有完满二叉树? 完全二叉树: 除了最后一层之外的其他每一层都被完全填 ...
分类:
编程语言 时间:
2019-07-07 12:38:47
阅读次数:
109
数据结构总结 堆(优先队列) 堆(优先队列) 黑匣子 开一个大根堆,一个小根堆,保证大根堆的元素个数为查询的i-1,输出小根堆的堆顶即可。如果插入的数a[j]比大根堆堆顶小,则把大根堆堆顶放到小根堆,a[j]放到大根堆里,保证大根堆里的最大值小于小根堆里的最小值。查询时把小根堆的堆顶放到大根堆里,使 ...
分类:
其他好文 时间:
2019-06-20 23:50:34
阅读次数:
136
这题是可以点分治或LCT作的。。但这里讲边分治的做法。。 和点分治类似,边分治利用一条树上路径要吗经过一条边,要么不经过。而不经过的路径必然会在一次分治中变为经过的。 我们找到一条中心边,边左边和边右边分别建一个大根堆。左边的堆中存储边的左子树中白点的深度,右边的堆储存右边的。 当发生颜色反转时,若 ...
分类:
其他好文 时间:
2019-06-09 09:22:53
阅读次数:
97
搬运自我的CSDN https://blog.csdn.net/u013213111/article/details/90343879 也就是一棵完全二叉树。堆顶最大则为大根堆,堆顶最小则为小根堆,这里实现的是小根堆。 1.定义 用一个数组来存储数据。 2.新建一个二叉堆 给二叉堆分配空间,给存储数 ...
分类:
其他好文 时间:
2019-06-01 21:38:23
阅读次数:
128
优先队列工作原理: 自动排序的队列 1 . 出队:弹出最小(大)。 2. 入队:插入一个元素,并调整好顺序。 而优先队列排序有什么优势呢?如图可知。 声明一个优先队列,先调用#include<queue> priority_queue <int> q; //大根堆,从大到小排序 priority_q ...
分类:
编程语言 时间:
2019-05-11 00:12:56
阅读次数:
276
P1177 【模板】快速排序 【 堆排序 】 时间复杂度:O(nlogn) PS:OI界的log都是以2为底数 空间复杂度:O(n) [ 代码 ]: #include<bits/stdc++.h> using namespace std; long long n,x,heap_size; int h ...
分类:
编程语言 时间:
2019-04-26 22:25:41
阅读次数:
188
模拟T1,贪心+排序或者二分都行 贪心策略很好想,显然每次晒耗时最久的衣服最优,问题是要在每次晒完后都再次找到耗时最久的衣服,不能每次都sort,所以单调队列或者大根堆 二分也不难,直接二分时间,筛一遍衣服统计需要烘干的时间然后判断是否满足就行 模拟的时候敲了贪心+排序,所以这里放二分的代码(滑稽) ...
分类:
其他好文 时间:
2019-04-21 17:36:40
阅读次数:
151
首先看两条链怎么合并,贪心可得是从大到小取max,多条链同理 所以dfs合并子树的大根堆即可,注意为了保证复杂度,合并的时候要合并到最长链上,证明见长链剖分 cpp include include include using namespace std; const int N=200005; in ...
分类:
其他好文 时间:
2019-04-15 20:31:48
阅读次数:
172
像超级钢琴一样把五元组放进大根堆,每次取一个出来拆开,(d,l,r,p,v)表示右端点为d,左端点区间为(l,r),最大区间和值为v左端点在p上 关于怎么快速求区间和,用可持久化线段树维护(主席树?)每个点到他root的区间和,这样每次右端点右移就是上一个的线段树在(la[a[i]]+1,i)加上a ...
分类:
其他好文 时间:
2019-04-05 19:56:56
阅读次数:
128
「Luogu1552」[APIO2012]派遣 最近状态都不是很好,写完这个题感觉手感好像恢复了一些 "problem" Solution 这个数据范围显然树形DP是做不了的 我们考虑,在预算范围内,选中的忍者越多越好,那么我们在一棵子树中选中的忍者一定是薪水最少的若干个 对每个节点维护一个大根堆, ...