通过枚举中间项以及公差,在枚举次数达到 109 时判定无解,可以通过(时间跟我的线段树差不多)。
int n,tot=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
pos[a[i]]=i;
}
for(int j=1;j<=(n-1)/2;j++)
for(int i=j+1;i<=n-j;i++)
{
int x=pos[i],y=pos[i-j],z=pos[i+j];
tot++;
if(tot==1000000000)
{
puts("N");
goto over;
}
if(y<=x&&x<=z||z<=x&&x<=y)
{
puts("Y");
goto over;
}
}
puts("N");
over:;