
堆
取竹
Hai capito?
展开
-
[poj 2274] The Race 堆
题目大意:飞船往同一方向飞,已知每个飞船的起点(不重合)和速度,问题一:每个飞船被超过的次数的总和(模1000000);问题二:输出前10000次超越,按照时间排序,若时间相同按照超越别飞船的飞船的输入顺序排序。第一个问题可以看出是求逆序数,并且输入因为有序,所以可以在线处理,并且因为数据十分小,最大100,所以完全可以暴力枚举。而使用线段树求逆序数也是很简单的问题,可以略过。第二原创 2017-02-16 18:30:00 · 595 阅读 · 0 评论 -
BZOJ 1150 数据备份Backup
算是套路的贪心,因为给出数据是有序的,先将相邻的搞成线段存进堆里,每次取出一个最小的值,加到总值中,并改变左右的链表值,并将左右线段值存入当前位置作为撤销操作。#include <cstdio>#include <algorithm>#include <queue>#define mk(a,b) make_pair(a,b) using namespace std;const int in原创 2017-09-12 20:35:13 · 324 阅读 · 0 评论 -
51Nod 1052 最大M子段和
先将同符号的每一段存下来,并记录前后段标号,将正数段总和记录为tot 开一个最小堆存每一段的abs值。 每次从堆中取出一个x 去掉这一段,并将左右的段与之合并再存入堆中,作为撤销或更改操作。 每次操作都会减少一段,直到段数=k就退出。#include<cstdio> #include<cstdlib> #include<cmath> #include<algorithm> #d原创 2017-09-11 21:27:32 · 259 阅读 · 0 评论 -
Codeforces 725D Contest Balloons
首先将每个队伍按照气球量从大到小排序,将大于XXX的队伍压入队列,在队列中按照 体重-气球量+1 从小到大排序。 当XXX的气球减少时,就需要把之前没进入队列但此时气球量大于XXX的队伍压入队列,不断更新最小ans。#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#define ll long lo原创 2017-09-11 21:34:21 · 249 阅读 · 0 评论