Submission
Status:
[PPPPPPPPPPPP]
Score: 100
User: Pera
Problemset: 01.H-index
Language: cpp
Time: 0.324 second
Submitted On: 2025-03-31 09:55:33
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int n; cin >> n;
vector<long long> research(n);
for (long long i = 0; i < n; ++i) cin >> research[i];
vector<long long> counts(n + 1);
for (long long i = 0; i < n; ++i) {
counts[min(static_cast<long long>(n), research[i])]++;
}
vector<long long> at_least(n + 2);
at_least[n+1] = 0;
for (long long i = n; i >= 0; --i) {
at_least[i] = at_least[i+1] + counts[i];
}
long long low = 0;
long long high = n;
long long h_index = 0;
while (low <= high) {
long long mid = (low + high) / 2;
if (at_least[mid] >= mid) {
h_index = mid;
low = mid + 1;
} else {
high = mid - 1;
}
}
cout << h_index << '\n';
}