#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 solve() { 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)); map, int> mp; auto chmax = [&](int i, int x, int val) { mp[{i, x}] = max(mp[{i, x}], val); }; auto execute = [&]() { for(auto [p, val] : mp) { auto [i, x] = p; if(seg[i].get(x) < val) seg[i].set(x, val); } mp.clear(); }; auto affect = [&](int x, int sc) { chmax(0, x, seg[0].prod(x, N + 2) + sc); chmax(1, x, max(seg[0].prod(0, x + 1), seg[1].prod(0, x + 1)) + sc); chmax(2, x, max(seg[1].prod(x, N + 2), seg[2].prod(x, N + 2)) + sc); chmax(3, x, max(seg[2].prod(0, x + 1), seg[3].prod(0, x + 1)) + sc); }; rep(x, N + 2) chmax(0, x, (H[0] >= x ? 1 : 0) + (x == H[1] ? 1 : 0)); execute(); for(int i = 2; i < N; ++i) { affect(H[i], 1); affect(0, 0); affect(N + 1, 0); execute(); } cout << N - seg[3].all_prod() << "\n"; return 0; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int T = 1; cin >> T; while(T--) if(solve()) return 1; return 0; }