#include #include using namespace std; int inf=2e9; int op(int a,int b){return max(a,b);} int e(){return -inf;} void solve(){ int n; cin>>n; vector h(n); for (int i=0;i>h[i]; auto cmp=h; sort(cmp.begin(),cmp.end()); vector seg(4,atcoder::segtree(n)); for (int i=0;i=0;i--){ vector vec={h[t]}; if (h[t]!=0) vec.push_back(0); if (h[t]!=n-1) vec.push_back(n-1); sort(vec.begin(),vec.end()); if (i%2==1) reverse(vec.begin(),vec.end()); for (int k:vec){ if (i%2==0){ int p=seg[i].prod(k,n); if (i) p=max(p,seg[i-1].prod(k,n)); seg[i].set(k,p+(k==h[t])); } else{ int p=seg[i].prod(0,k+1); p=max(p,seg[i-1].prod(0,k+1)); seg[i].set(k,p+(k==h[t])); } } } } cout<>t; while (t--) solve(); }