#include "bits/stdc++.h"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace std;
using namespace __gnu_pbds;
using ll = long long;
#define int ll
using pii = pair<int, int>;
template<typename T> using minHeap = priority_queue<T, vector<T>, greater<T>>;
#define all(x) x.begin(),x.end()
#define V vector
#define size(v) (int(v.size()))
const ll mxn= 2e5+3, inf= 1.5e18,mod= 1e9+7;//998244353;
// iwkms
//PBDS start
template <class T>
using order_set = tree<T, null_type, less_equal<T>, rb_tree_tag, tree_order_statistics_node_update>;
template <class K,class V>
using order_map = tree<K, V, less<K>, rb_tree_tag, tree_order_statistics_node_update>;
//less<T> for uniqe elements ,, less_equal<T> for duplicate
// s.order_of_key(x)=# of elements < x , s.find_by_order() = k-th largest element, 0 based
void solve() {
int n;cin>>n;
V<int> a(n),l(n),r(n);
for (int& i:a)cin>>i;
order_set<int> s;
for (int i=0;i<n;i++) {
l[i] = s.order_of_key( a[i]+ 1) ;
s.insert(a[i]);
}
s.clear();
for (int i=n-1;i>=0;i--) {
r[i] = size(s) - s.order_of_key(a[i]) ;
s.insert(a[i]);
}
int cnt =0;
for (int i=0;i<n;i++) {
if (l[i] >= a[i] or a[i] <= r[i]) ++cnt;
}
// for (int& i:l)cout<<i<<' ';cout<<"\n";
// for (int& i:r)cout<<i<<' ';cout<<"\n";
cout<<cnt;
}
int32_t main()
{
cin.tie(0)->sync_with_stdio(0);
// int t=1;cin>>t;while(t--)
solve();
return 0;
}