题目描述
农场上一个炎热的夏日,Farmer John为他的N个奶牛提供柠檬水,所有的奶牛编号从1到N。所有的奶牛都喜欢柠檬水,只是每个奶牛喜欢的程度不一样。具体的说就是奶牛i为了获取柠檬水,取柠檬水的时候只愿意排在最多wi头奶牛后面。
现在所有的奶牛都在田里面,当Farmer John敲响铃铛时,这些奶牛会立刻跑到Farmer John的柠檬水摊位。
奶牛们会在Farmer John提供柠檬水之前到达到摊位,但是没有两头奶牛同一时刻达到摊位。此外,当奶牛i达到时,当且仅当最多有wi头奶牛在排队时她才会排队。
Farmer John想要提前准备一定量的柠檬水,而且他不想浪费。排队的奶牛的数量取决于它们到达的顺序,请帮助Farmer John计算出,最少的可能排队的奶牛数量。
输入格式
第一行:一个整数N,表示奶牛的数量(1≤N≤10^5)
第二行:用空格隔开的N个整数,表示wi....wN,表示每个奶牛最多愿意排在wi头奶牛后面。(0≤wi≤10^9)
输出格式
一行,一个整数,表示所有编号的奶牛都到达摊位的前提下,最小可能排队的奶牛数量
输入输出样例
输入样例1:
5
7 1 400 2 2
输出样例1:
3
说明
样例说明:
在这个情况下,可能最后仅有三头奶牛在队伍中(这也是最小可能值)。假设w=7和w=400的奶牛先到并等在队伍中。然后w=1的奶牛到达并且会离开,这是由于已经有2头奶牛在队伍中了。然后w=2的两头奶牛到达,一头留下排队,一头离开。
【耗时限制】1000ms 【内存限制】128MB
//
//Created by Carlgood.
//
#include<iostream>
#include<cmath>
#include<string>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<sstream>
using namespace std;
int a[100010];
bool cmp(const int &x,const int &y)
{
return x>y;
}
int main()
{
int n,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++)
{
if(cnt<=a[i])
{
cnt++;
}
else
{
break;
}
}
cout<<cnt;
}