玄学题,一开始我居然看成了单调队列,emmmm
贪心:每个人的最优的分时a[i]+n;
其余要想他得到冠军,就要比他高分的人获得的最大得分是a[i]+n,要让初始分数最高的人拿到最低的排名,证明只可意会不可言传,OI贪心就是比较玄学
//洛谷P2777 //#include<bits/stdc++.h> #include <map> #include <set> #include <ctime> #include <cmath> #include <queue> #include <stack> #include <cstdio> #include <vector> #include <cstring> #include <cstdlib> #include <iostream> #include<algorithm> #include<cmath> #include<stdlib.h> using namespace std; int n,a[300001],maxx,ans,c[300001]; int main() { cin>>n; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); } sort(a+1,a+n+1); for(int i=1;i<=n;i++) c[i]=a[i]+n-i+1; for(int i=1;i<=n;i++) maxx=max(maxx,c[i]); for(int i=1;i<=n;i++) { if(a[i]+n>=maxx) ans++; } cout<<ans<< endl; }