#include #include #include #include #include using namespace std; struct line{ int l,r; }; bool operator < (const line &a,const line &b) { if(a.rl){ maxv[o]=max(maxv[lc],maxv[rc]); }else maxv[o]=0; maxv[o]+=d[o]; } void update(int o,int l,int r) { int lc=o*2; int rc=o*2+1; if(yl<=l&&yr>=r){ d[o]++; } else { int mid=l+((r-l)>>1); if(yl<=mid)update(lc,l,mid); if(yr>mid)update(rc,mid+1,r); } maintain(o,l,r); } int query(int o,int l,int r,int add) { if(yl<=l&&yr>=r){ return maxv[o]+add; } else { int m=l+((r-l)>>1); int ret=-1; if(yl<=m)ret=max(ret,query(o*2 , l , m , add + d[o] ) ); if(yr>m)ret=max(ret , query(o*2+1 , m+1 , r , add+d[o])); return ret; } } int bisearch(int x,int tot) { int le=0; int ri=tot-1; while(le>1; if(pos[mid]==x)return mid; if(pos[mid]>x)ri=mid-1; else { le=mid+1; } } return le; } int main() { int T; scanf("%d",&T); while(T--){ int n; scanf("%d",&n); int tot=0; set s; s.clear(); for(int i=0;i