【CF725D】Contest Balloons(贪心,堆)
题意:acm队伍可以得气球,相同气球数是一个排名。每个队伍有一个气球数上限,如果该队伍的气球数大于上限
该队伍被淘汰。给了你队伍的气球数,你的气球可以给别人,问你最大可能的排名。
(2 ≤ n ≤ 300 000) (0 ≤ ti ≤ wi ≤ 10^18)
思路:对每个初始t[i]>t[1]的i,将w[i]-t[i]+1放入小根堆中
开始给气球,将给出气球后大于当前气球数的组的w[i]-t[i]+1继续放入堆中
记录给后名次的最小值即可
const oo=;
var q,a,b,c,d:array[..]of int64; n,m,i,ans,t,w:longint;
s:int64; procedure swap(var x,y:int64);
var t:int64;
begin
t:=x; x:=y; y:=t;
end; procedure qsort(l,r:longint);
var i,j:longint;
mid1,mid2,mid3:int64;
begin
i:=l; j:=r; mid1:=a[(l+r)>>]; mid2:=b[(l+r)>>]; mid3:=c[(l+r)>>];
repeat
while (mid1<a[i])or(mid1=a[i])and(mid2>b[i])or
(mid1=a[i])and(mid2=b[i])and(mid3>c[i]) do inc(i);
while (mid1>a[j])or(mid1=a[j])and(mid2<b[j])or
(mid1=a[j])and(mid2=b[j])and(mid3<c[j]) do dec(j);
if i<=j then
begin
swap(a[i],a[j]); swap(b[i],b[j]); swap(c[i],c[j]);
inc(i); dec(j);
end;
until i>j;
if l<j then qsort(l,j);
if i<r then qsort(i,r);
end; function min(x,y:longint):longint;
begin
if x<y then exit(x);
exit(y);
end; procedure shiftup(x,m:longint);
begin
while (x>)and(q[x]<q[x>>]) do
begin
swap(q[x],q[x>>]);
x:=x>>;
end;
end; procedure shiftdown(x,m:longint);
var t:longint;
begin
while (x<<)<=m do
begin
t:=x<<;
if (t+<=m)and(q[t]>q[t+]) then t:=t+;
if q[x]>q[t] then
begin
swap(q[x],q[t]);
x:=t;
end
else break;
end;
end; begin
//assign(input,'cf725D.in'); reset(input);
//assign(output,'cf725D.out'); rewrite(output);
readln(n);
for i:= to n do
begin
read(a[i],b[i]);
c[i]:=i;
end;
qsort(,n);
for i:= to n do d[c[i]]:=i;
for i:= to d[]- do
begin
inc(m); q[m]:=b[i]-a[i]+; shiftup(m,m);
end;
s:=a[d[]];
for i:= to d[] do
if a[i]>a[d[]] then inc(ans);
inc(ans); t:=ans;
w:=d[]+;
while m> do
begin
if s-q[]>= then
begin
s:=s-q[]; q[]:=oo; shiftdown(,m); dec(t);
while (w<=n)and(a[w]>s) do
begin
inc(m); q[m]:=b[w]-a[w]+; shiftup(m,m);
inc(w); inc(t);
end;
ans:=min(ans,t);
end
else break;
end;
writeln(ans);
//close(input);
//close(output);
end.
【CF725D】Contest Balloons(贪心,堆)的更多相关文章
- codeforces 725D . Contest Balloons(贪心+优先队列)
题目链接:codeforces 725D . Contest Balloons 先按气球数从大到小排序求出初始名次,并把名次排在第一队前面的队放入优先队列,按w-t-1值从小到大优先,然后依次给气球给 ...
- CodeForces - 725D Contest Balloons 贪心
D. Contest Balloons time limit per test 3 seconds memory limit per test 2 ...
- Canada Cup 2016 D. Contest Balloons 好题。优先队列 + 简单贪心
http://codeforces.com/contest/725/problem/D 这题一看就是贪心的了,w - t最小的那个,肯定是优先打死. 但是一直都不会写,为什么呢,因为这个太像二分答案了 ...
- Contest Balloons
Contest Balloons 题目链接:http://codeforces.com/problemset/problem/725/D 贪心+枚举 每次在排名在自己前面的选出w-t值最小的送气球,更 ...
- 【贪心+堆】XMU 1584 小明的烦恼
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1584 题目大意: 给n(n<=100 000)个任务的耗时和截至时间,问最少不能 ...
- BZOJ_2151_种树_贪心+堆+链表
BZOJ_2151_种树_贪心+堆 Description A城市有一个巨大的圆形广场,为了绿化环境和净化空气,市政府决定沿圆形广场外圈种一圈树.园林部门得到指令后,初步规划出n个种树的位置,顺时针编 ...
- BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表
BZOJ_2006_[NOI2010]超级钢琴_贪心+堆+ST表 Description 小Z是一个小有名气的钢琴家,最近C博士送给了小Z一架超级钢琴,小Z希望能够用这架钢琴创作出世界上最美妙的 音乐 ...
- BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆
BZOJ_1029_ [JSOI2007]建筑抢修_贪心+堆 Description 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是 ...
- 【bzoj4425】[Nwerc2015]Assigning Workstations分配工作站 贪心+堆
题目描述 佩内洛普是新建立的超级计算机的管理员中的一员. 她的工作是分配工作站给到这里来运行他们的计算研究任务的研究人员. 佩内洛普非常懒惰,不喜欢为到达的研究者们解锁机器. 她可以从在她的办公桌远程 ...
- 【bzoj1029】[JSOI2007]建筑抢修 贪心+堆
题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者.但是T部落的基地里已经有N个建筑设施受到了严重的损伤,如果不尽快修复的话,这些建 ...
随机推荐
- java基础—多态(动态加载)
一.面向对象最核心的机制——动态绑定,也叫多态
- Bootstrap历练实例:带列表组的面板
带列表组的面板 我们可以在任何面板中包含列表组,通过在 <div> 元素中添加 .panel 和 .panel-default 类来创建面板,并在面板中添加列表组.您可以从 列表组 一章中 ...
- 微信小程序传值取值的几种方法
一,列表index下的取值 实现方式是:data-index="{{index}}"挖坑及e.currentTarget.dataset.index来填坑即可 1.1生成值 < ...
- MySQL数据库---索引
索引的作用就是快速找出在一个列上用一特定值的行.如果没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行. 索引的类型: 先写一个建表语句: CREATE TABLE `t ...
- C++简易酒店管理系统,实现(查询、入住、退房、楼层选择、退出)功能
#include <iostream> #include <string.h> #include <stdlib.h> void enter(); void che ...
- paper:synthesizable finite state machine design techniques using the new systemverilog 3.0 enhancements 之 standard verilog FSM conding styles(三段式)
Three always block style with registered outputs(Good style)
- python3 输入某年某月某日,判断这一天是这一年的第几天?
题目 输入某年某月某日,判断这一天是这一年的第几天? 程序分析 特殊情况,闰年时需考虑二月多加一天. 代码: import calendar year = int(input("Year:& ...
- perl-tips-1
.pm 应该保存 Perl Module,也就是 Perl 模块.例如 Socket.pm.pl 应该保存 Perl Library,也就是 Perl 库文件.例如 perldb.pl.plx 应该保 ...
- 枚举进程——暴力搜索内存(Ring0)
上面说过了隐藏进程,这篇博客我们就简单描述一下暴力搜索进程. 一个进程要运行,必然会加载到内存中,断链隐藏进程只是把EPROCESS从链表上摘除了,但它还是驻留在内存中的.这样我们就有了找到它的方法. ...
- HDU 5527 Too Rich 贪心
题意: 有\(10\)种面值为\(1, 5, 10, 20, 50, 100, 200, 500, 1000, 2000\)的纸币,现在你要选最多的数量凑成\(p\)块钱. 分析: 同样分析问题的反面 ...