#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 5e5 + 5, mod = 998244353;
int n, t, a[N], tim[N];
struct node {
int l, r, sum, tag;
} tr[2][N << 2];
void pushup(int x, int u) {
tr[x][u].sum = (tr[x][u << 1].sum * tim[tr[x][u << 1 | 1].r - tr[x][u << 1 | 1].l + 1] % mod + tr[x][u << 1 | 1].sum) % mod;
}
void build(int x, int u, int l, int r) {
tr[x][u] = {l, r, 0};
if(l == r) return;
int mid = l + r >> 1;
build(x, u << 1, l, mid);
build(x, u << 1 | 1, mid + 1, r);
}
void add(int x, int u, int tt, int k) {
if(tr[x][u].l == tr[x][u].r) {
tr[x][u].sum = k;
return;
}
int mid = tr[x][u].l + tr[x][u].r >> 1;
if(tt <= mid) add(x, u << 1, tt, k);
else add(x, u << 1 | 1, tt, k);
pushup(x, u);
}
int query(int x, int u, int l, int r) {
if(l <= tr[x][u].l && tr[x][u].r <= r) return (tim[r - tr[x][u].r] * tr[x][u].sum) % mod;
int mid = tr[x][u].l + tr[x][u].r >> 1, ans = 0;
if(l <= mid) ans += query(x, u << 1, l, r), ans %= mod;
if(r > mid) ans += query(x, u << 1 | 1, l, r), ans %= mod;
return ans % mod;
}
signed main() {
cin >> t;
tim[0] = 1;
for(int i = 1; i <= 500000; i++) tim[i] = tim[i - 1] * 2 % mod;
while(t--) {
cin >> n;
for(int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, 1, n);
build(2, 1, 1, n);
add(1, 1, a[1], 1);
add(2, 1, n + 1 - a[1], 1);
add(2, 1, n + 1 - a[2], 1);
bool flag = 0;
for(int i = 2; i < n; i++) {
int tmp = min(a[i] - 1, n - a[i]);
if(tmp != 0 && query(1, 1, a[i] - tmp, a[i] - 1) != query(2, 1, n - a[i] + 1 - tmp, n - a[i])) {
flag = 1;
break;
}
add(1, 1, a[i], 1);
add(2, 1, n + 1 - a[i + 1], 1);
}
if(flag) cout << "Y\n";
else cout << "N\n";
}
return 0;
}