#include using namespace std; #include using namespace atcoder; #define rep(i, n) for(int i = 0; i < (int)(n); ++i) int op(int a, int b) {if(a > b) return a; return b;} int e() {return -1e9;} int main() { int N; cin >> N; vector H(N); rep(i, N) cin >> H[i]; { vector> cp(N); rep(i, N) cp[i] = {H[i], i}; sort(cp.begin(), cp.end()); rep(i, N) H[cp[i].second] = i + 1; } vector seg(4, segtree(N + 2)); auto chmax = [&](int i, int x, int val) { seg[i].set(x, max(seg[i].get(x), val)); }; auto affect = [&](int x, int sc) { chmax(0, x, seg[0].prod(x, N + 2) + sc); chmax(2, x, max(seg[1].prod(x, N + 2), seg[2].prod(x, N + 2)) + sc); for(auto i : {1, 3}) chmax(i, x, max(seg[i - 1].prod(0, x + 1), seg[i].prod(0, x + 1)) + sc); }; seg[0].set(N + 1, 0); for(auto x : H) { affect(x, 1); affect(0, 0); affect(N + 1, 0); } cout << N - seg[3].all_prod() << "\n"; }