#include<bits/stdc++.h>
using namespace std;
#define ll long long
int re(){
int x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
return x*f;
}
void file(){
freopen(".in","r",stdin);
freopen(".out","w",stdout);
}
#define ull unsigned ll
const int N = 5e5+10,MOD=1e9+7;
int n;
ull hs1[N],hs2[N],jz[N];
int main(){
int T=re();
jz[0]=1;
for(int i=1;i<=N-10;i++)jz[i]=jz[i-1]*131%MOD;
while(T--){
n=re();
for(int i=1;i<=n;i++)hs1[i]=hs2[i]=0;
bool flag=0;
for(int i=1;i<=n;i++){
int x=re();
if(flag==1)continue;
for(int j=x;j<=n;j++)hs1[j]+=jz[x],hs1[j]%=MOD;
for(int j=x;j>=1;j--)hs2[j]+=jz[n-x+1],hs2[j]%=MOD;
if(x-1<n-x){
if((hs1[x]*jz[(n-x-x+1)]%MOD)!=(hs2[x]-hs2[x+x]+MOD)%MOD){
puts("Y");
flag=1;
}
}
else{
if((hs2[x]*jz[x-1-n+x])%MOD!=(hs1[x]-hs1[x-(n-x+1)])%MOD){
cout<<(hs2[x]*jz[x-1-n+x])%MOD<<" "<<(hs1[x]-hs1[x-(n-x+1)])%MOD;
puts("Y");
flag=1;
}
}
}
if(!flag)puts("N");
}
return 0;
}
16pts,讨论区有一hack:
1
10
1 9 5 3 7 4 8 10 2 6