#include <bits/stdc++.h>
#include <cstdio>
using namespace std;
#define sp << " " <<
#define ll long long
#define ld long double
#define pb push_back
#define F first
#define S second
#define PI 3.1415926535897932384626
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define sortall(x) sort(all(x))
#define sortrall(x) sort(rall(x))
#define printv(v) for(auto x : v) cout << x << " "; cout << "\n"
#define printm(m) for(auto x : m) cout << x.F sp x.S << "\n"
#define make_unique(x) sortall(x); (x).resize(unique(all(x)) - (x).begin())
const int mod = 1e9 + 7;
const int INF = 1e9;
const ll LINF = 1e18;
struct custom_hash {
static uint64_t splitmix64(uint64_t x) {
x += 0x9e3779b97f4a7c15;
x = (x ^ (x >> 30)) * 0xbf58476d1ce4e5b9;
x = (x ^ (x >> 27)) * 0x94d049bb133111eb;
return x ^ (x >> 31);
}
size_t operator()(uint64_t x) const {
static const uint64_t FIXED_RANDOM = chrono::steady_clock::now().time_since_epoch().count();
return splitmix64(x + FIXED_RANDOM);
}
};
template<typename T1, typename T2>
using safe_map = unordered_map<T1, T2, custom_hash>;
template<typename T>
using safe_set = unordered_set<T, custom_hash>;
template<typename T>
void debug(T x) {
cerr << x << endl;
}
template<typename T, typename... Args>
void debug(T x, Args... args) {
cerr << x << " ";
debug(args...);
}
void fastIO() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
}
void fraction() {
cout.unsetf(ios::floatfield);
cout.precision(10);
cout.setf(ios::fixed,ios::floatfield);
}
void yn(bool res, bool cap = false) {
if(!cap) cout << ((res) ? "YES\n" : "NO\n");
else cout << ((res) ? "Yes\n" : "No\n");
}
inline int nxt() {
int x;
cin >> x;
return x;
}
void proc(){
}
const int MAX = 1e5 + 5;
struct BIT {
vector<int> tree;
BIT(int n) : tree(n + 1, 0) {}
void update(int i, int v) {
for (; i < (int)tree.size(); i += i & -i)
tree[i] += v;
}
int query(int i) {
int res = 0;
for (; i > 0; i -= i & -i)
res += tree[i];
return res;
}
int query(int l, int r) {
return query(r) - query(l - 1);
}
};
void solve() {
int n; cin >> n;
vector<int> v(n);
for (auto &x : v) cin >> x;
vector<int> comp = v;
sortall(comp);
make_unique(comp);
auto id = [&](int x) {
return lower_bound(all(comp), x) - comp.begin() + 1;
};
BIT bit(comp.size());
vector<bool> ans(n, false);
for (int i = 0; i < n; i++) {
int val = id(v[i]);
int cnt = bit.query(val);
if (cnt >= v[i]) ans[i] = true;
bit.update(val, 1);
}
bit = BIT(comp.size());
for (int i = n - 1; i >= 0; i--) {
int val = id(v[i]);
int cnt = bit.query(val, comp.size());
if (cnt >= v[i]) ans[i] = true;
bit.update(val, 1);
}
cout << count(all(ans), true) << '\n';
}
int main() {
fastIO();
proc();
int tc = 1;
// tc = nxt();
for (int t = 1; t <= tc; t++) {
// cout << "Case " << t << ": ";
solve();
}
}