【CF725D】Contest Balloons(贪心,堆)
2024-08-27 23:09:41
题意: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.
最新文章
- Python标准模块--Iterators和Generators
- (转载) RESTful API 设计指南
- 新手入门指导:Vue 2.0 的建议学习顺序
- mave web常用配置文件参数
- 执行gem install linne时报错
- 批量运行R包
- BlazeMeter发布chrome扩展插件,支持JMeter脚本创建
- ajax &; jsonp &; img
- 数据结果与算法分析(1)&mdash;&mdash;算法分析
- 健身计划_from85to75
- 如何利用多核CPU来加速你的Linux命令 — awk, sed, bzip2, grep, wc等(转)
- js日期操作时间看板
- [BZOJ4907]柠檬
- 高效实用的.NET开源项目
- RabbitMQ阻塞读取时数据时,关闭channel引起的问题和解决方案
- SpringBoot整合Spring Security使用Demo
- java Calendar 入门【转】
- jsp案例--展示数据库中的数据
- tensorflow学习之(六)使用tensorboard展示神经网络的graph
- libvirt的security