题意:
输入一个正整数N(<=100000),接着输入N个非负整数。输出最大的整数E使得有至少E个整数大于E。
AAAAAccepted code:
1 #define HAVE_STRUCT_TIMESPEC 2 #include<bits/stdc++.h> 3 using namespace std; 4 int a[100007]; 5 int num[100007]; 6 map<int,int>mp; 7 int main(){ 8 ios::sync_with_stdio(false); 9 cin.tie(NULL); 10 cout.tie(NULL); 11 int n; 12 cin>>n; 13 int cnt=0; 14 for(int i=1;i<=n;++i) 15 cin>>a[i]; 16 sort(a+1,a+1+n); 17 for(int i=1;i<=n;++i){ 18 if(!mp[a[i]]) 19 mp[a[i]]=++cnt; 20 ++num[mp[a[i]]]; 21 } 22 for(int i=cnt-1;i;--i) 23 num[i]+=num[i+1]; 24 int ans=0; 25 for(int i=n;i;--i){ 26 int pos=upper_bound(a+1,a+1+n,i)-a; 27 if(pos<=n&&num[mp[a[pos]]]>=i){ 28 ans=i; 29 break; 30 } 31 } 32 cout<<ans; 33 return 0; 34 }
原文地址:https://www.cnblogs.com/ldudxy/p/12343666.html
时间: 2024-11-07 06:57:12