#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<ll> a(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
}
// Sort initial rewards in decreasing order
sort(a.begin(), a.end(), greater<ll>());
/*
prefix[i] =
maximum value of:
a[j] + (j + 1)
for j <= i
This represents the maximum final score
among customers BEFORE the candidate.
*/
vector<ll> prefix(n);
for (int i = 0; i < n; i++) {
ll value = a[i] + (i + 1);
if (i == 0)
prefix[i] = value;
else
prefix[i] = max(prefix[i - 1], value);
}
/*
suffix[i] =
maximum value of:
a[j] + j
for j >= i
This represents the maximum final score
among customers AFTER the candidate.
*/
vector<ll> suffix(n);
for (int i = n - 1; i >= 0; i--) {
ll value = a[i] + i;
if (i == n - 1)
suffix[i] = value;
else
suffix[i] = max(suffix[i + 1], value);
}
int answer = 0;
// Try every customer as the winner
for (int i = 0; i < n; i++) {
// Candidate wins and receives n tournament points
ll candidateScore = a[i] + n;
ll bestOtherScore = LLONG_MIN;
// Customers before i
if (i > 0) {
bestOtherScore = max(
bestOtherScore,
prefix[i - 1]
);
}
// Customers after i
if (i + 1 < n) {
bestOtherScore = max(
bestOtherScore,
suffix[i + 1]
);
}
// Candidate has the highest score
if (candidateScore >= bestOtherScore) {
answer++;
}
}
cout << answer << '\n';
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7Cgp1c2luZyBsbCA9IGxvbmcgbG9uZzsKCmludCBtYWluKCkgewoKICAgIGlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CgogICAgaW50IG47CiAgICBjaW4gPj4gbjsKCiAgICB2ZWN0b3I8bGw+IGEobik7CgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gYVtpXTsKICAgIH0KCiAgICAvLyBTb3J0IGluaXRpYWwgcmV3YXJkcyBpbiBkZWNyZWFzaW5nIG9yZGVyCiAgICBzb3J0KGEuYmVnaW4oKSwgYS5lbmQoKSwgZ3JlYXRlcjxsbD4oKSk7CgogICAgLyoKICAgICAgICBwcmVmaXhbaV0gPQogICAgICAgIG1heGltdW0gdmFsdWUgb2Y6CgogICAgICAgICAgICBhW2pdICsgKGogKyAxKQoKICAgICAgICBmb3IgaiA8PSBpCgogICAgICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBmaW5hbCBzY29yZQogICAgICAgIGFtb25nIGN1c3RvbWVycyBCRUZPUkUgdGhlIGNhbmRpZGF0ZS4KICAgICovCiAgICB2ZWN0b3I8bGw+IHByZWZpeChuKTsKCiAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykgewoKICAgICAgICBsbCB2YWx1ZSA9IGFbaV0gKyAoaSArIDEpOwoKICAgICAgICBpZiAoaSA9PSAwKQogICAgICAgICAgICBwcmVmaXhbaV0gPSB2YWx1ZTsKICAgICAgICBlbHNlCiAgICAgICAgICAgIHByZWZpeFtpXSA9IG1heChwcmVmaXhbaSAtIDFdLCB2YWx1ZSk7CiAgICB9CgogICAgLyoKICAgICAgICBzdWZmaXhbaV0gPQogICAgICAgIG1heGltdW0gdmFsdWUgb2Y6CgogICAgICAgICAgICBhW2pdICsgagoKICAgICAgICBmb3IgaiA+PSBpCgogICAgICAgIFRoaXMgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBmaW5hbCBzY29yZQogICAgICAgIGFtb25nIGN1c3RvbWVycyBBRlRFUiB0aGUgY2FuZGlkYXRlLgogICAgKi8KICAgIHZlY3RvcjxsbD4gc3VmZml4KG4pOwoKICAgIGZvciAoaW50IGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHsKCiAgICAgICAgbGwgdmFsdWUgPSBhW2ldICsgaTsKCiAgICAgICAgaWYgKGkgPT0gbiAtIDEpCiAgICAgICAgICAgIHN1ZmZpeFtpXSA9IHZhbHVlOwogICAgICAgIGVsc2UKICAgICAgICAgICAgc3VmZml4W2ldID0gbWF4KHN1ZmZpeFtpICsgMV0sIHZhbHVlKTsKICAgIH0KCiAgICBpbnQgYW5zd2VyID0gMDsKCiAgICAvLyBUcnkgZXZlcnkgY3VzdG9tZXIgYXMgdGhlIHdpbm5lcgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspIHsKCiAgICAgICAgLy8gQ2FuZGlkYXRlIHdpbnMgYW5kIHJlY2VpdmVzIG4gdG91cm5hbWVudCBwb2ludHMKICAgICAgICBsbCBjYW5kaWRhdGVTY29yZSA9IGFbaV0gKyBuOwoKICAgICAgICBsbCBiZXN0T3RoZXJTY29yZSA9IExMT05HX01JTjsKCiAgICAgICAgLy8gQ3VzdG9tZXJzIGJlZm9yZSBpCiAgICAgICAgaWYgKGkgPiAwKSB7CiAgICAgICAgICAgIGJlc3RPdGhlclNjb3JlID0gbWF4KAogICAgICAgICAgICAgICAgYmVzdE90aGVyU2NvcmUsCiAgICAgICAgICAgICAgICBwcmVmaXhbaSAtIDFdCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAvLyBDdXN0b21lcnMgYWZ0ZXIgaQogICAgICAgIGlmIChpICsgMSA8IG4pIHsKICAgICAgICAgICAgYmVzdE90aGVyU2NvcmUgPSBtYXgoCiAgICAgICAgICAgICAgICBiZXN0T3RoZXJTY29yZSwKICAgICAgICAgICAgICAgIHN1ZmZpeFtpICsgMV0KICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIC8vIENhbmRpZGF0ZSBoYXMgdGhlIGhpZ2hlc3Qgc2NvcmUKICAgICAgICBpZiAoY2FuZGlkYXRlU2NvcmUgPj0gYmVzdE90aGVyU2NvcmUpIHsKICAgICAgICAgICAgYW5zd2VyKys7CiAgICAgICAgfQogICAgfQoKICAgIGNvdXQgPDwgYW5zd2VyIDw8ICdcbic7CgogICAgcmV0dXJuIDA7Cn0=