RT
#include<bits/stdc++.h>
#define mids(l,r) const auto mid = (l + r) >> 1
#define lb(x) (x&-x)
#define ls (x<<1)
#define rs (ls|1)
#define int long long
#define pii pair<int,int>
#define inf 0x3f3f3f3f
#define tl t[0]
#define tr t[1]
using namespace std;
const int maxn = 1e6+10,m1 = 1e9+7,m2 = 998244353,b1 = 233,b2 = 23333;
int T,n,a[maxn],pb1[maxn] = {1,b1}, pb2[maxn] = {1,b2};
struct data{
int h1,h2;
}t[2][maxn<<2],*seg;
data merge(const data& u,const data& v,int vsiz) {
return data{
.h1 = u.h1 * pb1[vsiz] % m1 + v.h1,
.h2 = u.h2 * pb2[vsiz] % m2 + v.h2
};
}
void pushup(int x,int rsiz) { seg[x] = merge(seg[ls],seg[rs],rsiz); }
void upd(int x,int l,int r,int p,int v) {
if(l == r) return void(seg[x] = {v,v});
mids(l,r);
if(p <= mid) upd(ls,l,mid,p,v);
else upd(rs,mid+1,r,p,v);
pushup(x,r-mid);
}
data get(int x,int ml,int mr,int ql,int qr) {
if(ql <= ml && mr <= qr) return seg[x];
mids(ml,mr);
if(ql > mid) return get(rs,mid+1,mr,ql,qr);
if(mid >= qr) return get(ls,ml,mid,ql,qr);
return merge(get(ls,ml,mid,ql,qr),get(rs,mid+1,mr,ql,qr),min(qr,mr)-mid);
}
void upd(int p,int v) {
seg = tl;
upd(1,1,n,p,v);
seg = tr;
upd(1,1,n,n+1-p,v);
}
bool check(int pos) {
seg = tl;
data hl = get(1,1,n,max(1ll,pos+pos-n),min(n,pos+pos-1));
seg = tr;
pos = n + 1 - pos;
data hr = get(1,1,n,max(1ll,pos+pos-n),min(n,pos+pos-1));
return hl.h1 == hr.h1 && hl.h2 == hr.h2;
}
void work() {
cin>>n;
for(int i = 1;i<=n;++i) cin>>a[i];
for(int i = 1;i <= n;++i) {
if(!check(a[i])) return cout<<"Y\n",void(0);
upd(a[i],1);
upd(a[i+1],2);
}
cout<<"N\n";
}
signed main() {
for(int i = 2;i<maxn;++i) pb1[i] = pb1[i-1] * b1 % m1, pb2[i] = pb2[i-1] * b2 % m2;
ios::sync_with_stdio(0),cin.tie(0);
cin>>T;
while(T--) work(),memset(t,0,sizeof t);
}