#include using namespace std; using ll = long long; #define int long long #define endl '\n' struct node{ int sum=0,mx_p=-1e9,mx_s=-1e9,res=-1e9; int mn_p=1e9,mn_s=1e9,rem=1e9; }; struct segtree{ vectortree; int n; void init(int m){ n = m; tree.assign(4*n,node()); } node merge(node A, node B) { node C; C.sum = A.sum + B.sum; C.mx_p = max(A.mx_p, A.sum + B.mx_p); C.mx_s = max(B.mx_s, B.sum + A.mx_s); C.res = max({A.res, B.res, A.mx_s + B.mx_p}); C.mn_p = min(A.mn_p, A.sum + B.mn_p); C.mn_s = min(B.mn_s, B.sum + A.mn_s); C.rem = min({A.rem, B.rem, A.mn_s + B.mn_p}); return C; } void upd(int i, int v, int x, int lx, int rx){ if(rx-lx==1){ tree[x].sum = v; tree[x].mx_p = v; tree[x].mx_s = v; tree[x].res = v; tree[x].mn_p = v; tree[x].mn_s = v; tree[x].rem = v; return; } int mid = (lx + rx) / 2; if (i < mid) { upd(i, v, x * 2 + 1, lx, mid); } else { upd(i, v, x * 2 + 2, mid, rx); } tree[x] = merge(tree[x * 2 + 1], tree[x * 2 + 2]); } void upd(int i, int v) { upd(i, v, 0, 0, n); } node get(int l, int r, int x, int lx, int rx) { if (l >= rx || r <= lx) { return node(); } if (l <= lx && r >= rx) { return tree[x]; } int mid = (lx + rx) / 2; return merge(get(l, r, x * 2 + 1, lx, mid), get(l, r, x * 2 + 2, mid, rx)); } node get(int l, int r) { return get(l, r, 0, 0, n); } }; void solve(){ int n; cin>>n; int a[n+3]; int p[n+3]; for(int i=1;i<=n;i++){ cin>>a[i]; p[a[i]]=i; } segtree tr; tr.init(n+2); for(int i=1;i<=n;i++){ tr.upd(i,1); } bool res[n+1]; memset(res,0,sizeof res); for(int i=1;i<=n;i++){ tr.upd(p[i],0); if(p[i]!=1){ node re1=tr.get(1,p[i]); // cout<=0 && re1.mn_s<=0){ res[p[i]]=1; tr.upd(p[i],-1); continue; } } if(p[i]!=n){ node re1=tr.get(p[i]+1,n+1); // cout<=0 && re1.mn_p<=0){ res[p[i]]=1; tr.upd(p[i],-1); continue; } } if(p[i]!=1 && p[i]!=n){ node re1=tr.get(1,p[i]); node re2=tr.get(p[i]+1,n+1); if((re1.mx_s>0 && re2.mn_p<0) || (re1.mn_s<0 && re2.mx_p>0)){ res[p[i]]=1; tr.upd(p[i],-1); continue; } } tr.upd(p[i],-1); } for(int i=1;i<=n;i++){ cout<<(res[i]==1?"YES":"NO")<<' '; }cout<>t; for(int _=1;_<=t;_++){ solve(); } }