确认右端点后,即可确认左端点的范围,则能确认该右端点能取到的最大值(用前缀和维护sum=s[i]-s[j],s[i]确认,则用ST表维护s[j]最小值) 用优先队列维护,每次取最大值,再将以该右端点为右端点的左右两段区间最值分别放入队列中 ...
分类:
其他好文 时间:
2018-06-09 15:59:40
阅读次数:
183
用c++实现了Prim算法。用了c++的优先队列。 代码仅供参考: ...
分类:
编程语言 时间:
2018-06-03 19:40:45
阅读次数:
171
用Map呗,但是后续也很烦。 突然想到了一个自定义数据结构的方法 int val 是值 int count 是次数 继承comparable 比较count即可! 非常方便 先通过Map去统计,再通过Map->生成一个这样的List,再排序即可。 统计的Map还是要的,但是不排序。 小顶堆。只要比最 ...
分类:
其他好文 时间:
2018-06-02 00:40:00
阅读次数:
170
/* 本题是一个比较简单的堆排序的题目, 思想和之前的合并果子非常像(简直一模一样) 我每次找到数列中最小的俩个进行合并, 再将合并后的数存入数列中 (可以用堆实现,大佬可以无视直接用优先队列,原理是一样的, 我们建立一个二叉树,让每个子节点都大于它的父亲节点 二叉树的根节点就成了最小值) 再找新的 ...
分类:
其他好文 时间:
2018-05-30 01:17:51
阅读次数:
215
何为单调队列? 单调队列是一个队列(废话) 而且必须同时满足下标单调和值单调两个单调特性。 跟优先队列不同,优先队列直接使用堆(heap)来实现,如何删去特定下标元素?不明。 本人喜欢用单调队列存下标,这样比存值不知道高到哪里去了。 新来一个元素,进队。之后特判长度有没有超过。超过则把最前面的元素出 ...
分类:
其他好文 时间:
2018-05-29 14:02:52
阅读次数:
155
关键字为priority_queue ( 大根堆 ) 和 priority_queue <int,vector<int>,greater<int>> ( 小根堆 ). 在一些定义了权重的地方这个数据结构是很有用的。 先回顾队列的定义:队列(queue)维护了一组对象,进入队列的对象被放置在尾部,下一 ...
分类:
其他好文 时间:
2018-05-26 16:44:46
阅读次数:
219
1. 题目1:关于工作安排, 每个工作有权重weight和时长length这样两个属性,要求如何安排时间使得$\sum_j^n W_j C_j$的值最小。假设一共n个工作,$W_j$为第j个工作的权重,$C_j$为到第j个工作工作完成的时长(加上之前的工作时长)。 贪心算法有这样两个思路: 按照 ( ...
分类:
其他好文 时间:
2018-05-26 12:57:28
阅读次数:
165
n表示点的个数,m表示边的条数,在依次输入边的起点终点与权值,输出总花费。 可用优先队列优化,需要的话请留言。 ...
分类:
编程语言 时间:
2018-05-23 13:05:21
阅读次数:
188
排序 题意:输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。 思路:我先用st ...
分类:
编程语言 时间:
2018-05-21 21:18:56
阅读次数:
161