zoukankan      html  css  js  c++  java
  • 【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继续放入堆中

            记录给后名次的最小值即可

      1 const oo=2000000000000000000;
      2 var q,a,b,c,d:array[1..310000]of int64;
      3 
      4     n,m,i,ans,t,w:longint;
      5     s:int64;
      6 
      7 procedure swap(var x,y:int64);
      8 var t:int64;
      9 begin
     10  t:=x; x:=y; y:=t;
     11 end;
     12 
     13 procedure qsort(l,r:longint);
     14 var i,j:longint;
     15     mid1,mid2,mid3:int64;
     16 begin
     17  i:=l; j:=r; mid1:=a[(l+r)>>1]; mid2:=b[(l+r)>>1]; mid3:=c[(l+r)>>1];
     18  repeat
     19   while (mid1<a[i])or(mid1=a[i])and(mid2>b[i])or
     20         (mid1=a[i])and(mid2=b[i])and(mid3>c[i]) do inc(i);
     21   while (mid1>a[j])or(mid1=a[j])and(mid2<b[j])or
     22         (mid1=a[j])and(mid2=b[j])and(mid3<c[j]) do dec(j);
     23   if i<=j then
     24   begin
     25    swap(a[i],a[j]); swap(b[i],b[j]); swap(c[i],c[j]);
     26    inc(i); dec(j);
     27   end;
     28  until i>j;
     29  if l<j then qsort(l,j);
     30  if i<r then qsort(i,r);
     31 end;
     32 
     33 function min(x,y:longint):longint;
     34 begin
     35  if x<y then exit(x);
     36  exit(y);
     37 end;
     38 
     39 procedure shiftup(x,m:longint);
     40 begin
     41  while (x>1)and(q[x]<q[x>>1]) do
     42  begin
     43   swap(q[x],q[x>>1]);
     44   x:=x>>1;
     45  end;
     46 end;
     47 
     48 procedure shiftdown(x,m:longint);
     49 var t:longint;
     50 begin
     51  while (x<<1)<=m do
     52  begin
     53   t:=x<<1;
     54   if (t+1<=m)and(q[t]>q[t+1]) then t:=t+1;
     55   if q[x]>q[t] then
     56   begin
     57    swap(q[x],q[t]);
     58    x:=t;
     59   end
     60    else break;
     61  end;
     62 end;
     63 
     64 begin
     65  //assign(input,'cf725D.in'); reset(input);
     66  //assign(output,'cf725D.out'); rewrite(output);
     67  readln(n);
     68  for i:=1 to n do
     69  begin
     70   read(a[i],b[i]);
     71   c[i]:=i;
     72  end;
     73  qsort(1,n);
     74  for i:=1 to n do d[c[i]]:=i;
     75  for i:=1 to d[1]-1 do
     76  begin
     77   inc(m); q[m]:=b[i]-a[i]+1; shiftup(m,m);
     78  end;
     79  s:=a[d[1]];
     80  for i:=1 to d[1] do
     81   if a[i]>a[d[1]] then inc(ans);
     82  inc(ans); t:=ans;
     83  w:=d[1]+1;
     84  while m>0 do
     85  begin
     86   if s-q[1]>=0 then
     87   begin
     88    s:=s-q[1]; q[1]:=oo; shiftdown(1,m); dec(t);
     89    while (w<=n)and(a[w]>s) do
     90    begin
     91     inc(m); q[m]:=b[w]-a[w]+1; shiftup(m,m);
     92     inc(w); inc(t);
     93    end;
     94    ans:=min(ans,t);
     95   end
     96    else break;
     97  end;
     98  writeln(ans);
     99  //close(input);
    100  //close(output);
    101 end.
  • 相关阅读:
    解决virtualbox与mac文件拖拽问题
    SNMP收集
    scapy的安装
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    subprocess.call(cmd, shell=True)
    能够把意见说的让人接受是个技能
    (转)Jenkins2.0 Pipeline 插件执行持续集成发布流程
    ansible 与 Jinja2的结合 -- 安装zabbix
    运维自动化平台-背后的设计计划和架构
    命令行获取zabbix最新的issues
  • 原文地址:https://www.cnblogs.com/myx12345/p/6039002.html
Copyright © 2011-2022 走看看