#include <bits/stdc++.h>
using namespace std;
#define Max(a,b) (a>b?a:b)
inline void read(int& x)
{
x=0;int f=1;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while('0'<=c&&c<='9')
{
x=(x<<1)+(x<<3)+c-'0';
c=getchar();
}
x*=f;
}
const int N=1e6+10;
int n,m,a[N],x[N],bl,tot,R[N],st[N],ed[N],e[N];
struct node
{
int l,r,id;
}q[N];
int d[N],ans[N],mx;
bool cmp(node x,node y)
{
return (d[x.l]^d[y.l]?d[x.l]<d[y.l]:x.r<y.r);
}
int main()
{
read(n);
bl=ceil(sqrt(n));
tot=(n-1)/bl+1;
for(int i=1;i<tot;i++)R[i]=i*bl;
R[tot]=n;
int cnt=0;
for(int i=1;i<=n;i++){
d[i]=(i-1)/bl+1;
read(a[i]);
x[++cnt]=a[i];
}
sort(x+1,x+n+1);
cnt=unique(x+1,x+cnt+1)-x-1;
for(int i=1;i<=n;i++)a[i]=lower_bound(x+1,x+cnt+1,a[i])-x;
read(m);
for(int i=1;i<=m;i++)
{
read(q[i].l),read(q[i].r);
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
int l=1,r=0,ql=0,qr=0,lsbl=0;
for(int i=1;i<=m;i++)
{
ql=q[i].l,qr=q[i].r;
if(d[ql]==d[qr])
{
int mxx=0;
for(int j=ql;j<=qr;j++)st[a[j]]=0;
for(int j=ql;j<=qr;j++)
{
if(st[a[j]])
{
mxx=Max(mxx,j-st[a[j]]);
}
if(!st[a[j]])st[a[j]]=j;
}
for(int j=ql;j<=qr;j++)st[a[j]]=0;
ans[q[i].id]=mxx;
continue;
}
if(lsbl!=d[ql])
{
for(int j=l;j<=r;j++)st[a[j]]=ed[a[j]]=0;
l=R[d[ql]];
r=R[d[ql]]-1;
lsbl=d[ql];
}
while(r<qr)
{
r++;
ed[a[r]]=r;
if(!st[a[r]])st[a[r]]=r;
mx=Max(mx,r-st[a[r]]);
}
int l1=l,temp=mx;
while(l1>ql)
{
l1--;
if(e[a[l1]]==0)e[a[l1]]=l1;
temp=Max(temp,Max(ed[a[l1]],e[a[l1]])-l1);
}
while(l1<l)
{
e[a[l1]]=0;
l1++;
}
ans[q[i].id]=temp;
}
for(int i=1;i<=m;i++)
{
cout<<ans[i]<<'\n';
}
return 0;
}
过了 1,2,3,16,17 这些点,其他点全 WA ,请求帮助----