自行车比赛(AHOI2016初中组T1)

来源:互联网 发布:python split去除空格 编辑:程序博客网 时间:2024/04/28 08:08

【题目描述】
小雪非常关注自行车比赛,尤其是环滨湖自行车赛。一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军。今年一共有 N 位参赛选手。每一天的比赛总会决出当日的排名,第一名的选手会获得 N 点得分,第二名会获得 N-1 点得分,第三名会获得 N-2 点得分,依次类推,最后一名会获得 1 点得分。保证没有选手会排名相同。
在之前的数日较量中, N 位选手已经分别累计了一些分数。现在即将开始的是最后一天的比赛。小雪希望知道有多少位选手还有可能获得最终的冠军,也就是说还有多少选手有可能通过最后一天的比赛获得累计总分第一名。
【输入格式】
第一行输入一个整数 N,表示参赛选手总数,保证 3<=N<=300000。
之后 N 行,其中第 i 行输入一个整数 B[i]表示第 i 位选手已经获得的累计分数,满足0<=B[i]<=2000000。
【输出格式】
输出只有一行,只输出一个整数,表示有多少位选手有可能获得最终的冠军。
【样例输入】
3
8
10
9
【样例输出】
3
【数据范围】
3<=N<=300000 且 0<=B[i]<=2000000。
【分析】
单调队列模拟下就好。

var  i,n,p,q:longint;  a:array[0..300001]of longint;procedure qsort(l,r:longint);var  i,j,mid,tmp:longint;begin  i:=l;j:=r;  mid:=a[(l+r) div 2];  repeat    while a[i]<mid do inc(i);      while a[j]>mid do dec(j);      if i<=j then      begin        tmp:=a[i];a[i]:=a[j];a[j]:=tmp;        inc(i);dec(j);    end;  until i>j;  if l<j then qsort(l,j);  if i<r then qsort(i,r);end;begin  readln(n);  for i:=1 to n do readln(a[i]);  qsort(1,n);  a[0]:=maxlongint;  q:=n;  for p:=1 to n-1 do  begin    while a[q]+n-q+1<=a[p]+n do dec(q);    if q<p then break;  end;  write(n-p+1);end.
3 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝吃了润滑油怎么办 透明胶带撕不起怎么办 马克笔颜料没了怎么办 匡威鞋掉色了怎么办 补眉后颜色很淡怎么办 磨砂画出毛了怎么办 纹眉毛不上色怎么办 四岁儿童龋齿怎么办 墙没有刷乳胶漆怎么办 壁纸不想要了怎么办 自粘墙纸撕不掉怎么办 打雷了怎么办主题画 打雷了怎么办小班教案 费雪小火车不走怎么办 宝宝睡觉要开灯怎么办 门上有人做记号怎么办 颜料粘上衣服洗不掉怎么办 半夜有小偷开锁怎么办 幼儿园人数较多怎么办 附近幼儿园拖班招满了怎么办 6个月大宝宝拉肚子怎么办 婴儿容易吐奶怎么办 新生儿睡眠时间颠倒怎么办 婴儿睡觉黑白颠倒怎么办 婴儿黑白颠倒了怎么办 宝宝肠粘膜受损怎么办 dnf会卡换装怎么办? 孩子不讲理蛮横怎么办 孩子不爱上学了怎么办 幼儿园孩子不爱上学怎么办 额头撞肿了怎么办 两岁半宝宝说话晚怎么办 1岁宝宝拉肚子怎么办? 小孩嗓子老哑怎么办 小孩嗓子经常哑怎么办 小孩子一年级成绩差怎么办 小孩子一年级学习成绩差怎么办 楼上有孩子扰民怎么办 隔壁小孩太吵怎么办 楼上孩子太吵怎么办 泰国贴纸签小孩怎么办