只有 #1 #16 #17 AC了,其他全WA
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int n,k,a[N],b[N],m,la[N],fi[N];
int R[N],gk[N];
int ans[N],res,gun;
struct que
{
int l,r,id;
}q[N];
bool cmp(que A,que B){
if(gk[A.l]==gk[B.l]) return A.r<B.r;
return gk[A.l]<gk[B.l];
}
void add(int x,int &Ans)
{
if(!la[a[x]]) la[a[x]]=x;
fi[a[x]]=x;
Ans=max(Ans,x-la[a[x]]);
}
int main()
{
// freopen("","r",stdin);
// freopen("","w",stdout);
scanf("%d",&n);
k=sqrt(n);
for(int i=1;i<=n;++i) scanf("%d",a+i),b[i]=a[i];
sort(b+1,b+n+1);
int nn=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;++i) a[i]=lower_bound(b+1,b+nn+1,a[i])-b;
for(int i=1;i<=n;++i)
{
gk[i]=(i-1)/k+1;
R[gk[i]]=i;
}
scanf("%d",&m);
for(int i=1;i<=m;++i) scanf("%d%d",&q[i].l,&q[i].r),q[i].id=i;
sort(q+1,q+m+1,cmp);
for(int i=1,l=1,r=0,lak=0;i<=m;++i)
{
if(gk[q[i].l]==gk[q[i].r])
{
gun=0;
for(int j=q[i].l;j<=q[i].r;++j)
{
if(!la[a[j]]) la[a[j]]=j;
else gun=max(gun,j-la[a[j]]);
}
for(int j=q[i].l;j<=q[i].r;++j) la[a[j]]=0;
ans[q[i].id]=gun;
continue;
}
if(lak!=gk[q[i].l])
{
for(int j=l;j<=r;++j) la[a[j]]=fi[a[j]]=0;
l=R[gk[q[i].l]]+1;
r=R[gk[q[i].l]];
lak=gk[q[i].l];
res=0;
}
while(r<q[i].r) add(++r,res);
gun=res;
int nl=l;
while(nl>q[i].l)
{
nl--;
if(fi[a[nl]]) gun=max(gun,fi[a[nl]]-nl);
}
ans[q[i].id]=gun;
}
for(int i=1;i<=m;++i) printf("%d\n",ans[i]);
return 0;
}