看不出哪儿错了。
#include<bits/stdc++.h>
using namespace std;
int sz;
int bl(int x){
return x/sz;
}
struct nd{
int l,r,v;
bool operator<(nd a){
if(bl(l)!=bl(a.l)) return l<a.l;
return r<a.r;
}
}q[200010];
int n,m,a[200010],b[200010],g;
int le[200010],ri[200010],res,ans[200010];
int l=1,r,lp,lb,tp;
stack<int> s,s1,s2;
int lt[200010],rt[200010];
int br(int x){
return min((x+1)*sz-1,n);
}
void add(int x){
le[a[x]]=min(le[a[x]],x);
ri[a[x]]=max(ri[a[x]],x);
res=max(res,ri[a[x]]-le[a[x]]);
}
int main(){
scanf("%d",&n);
sz=sqrt(n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
b[i]=a[i];
}
sort(b+1,b+n+1);
g=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;i++){
a[i]=lower_bound(b+1,b+g+1,a[i])-b;
}
scanf("%d",&m);
for(int i=1;i<=m;i++){
scanf("%d%d",&q[i].l,&q[i].r);
q[i].v=i;
}
sort(q+1,q+m+1);
memset(le,0x3f3f3f,sizeof(le));
memset(lt,0x3f3f3f,sizeof(lt));
for(int i=1;i<=m;i++){
if(bl(q[i].l)==bl(q[i].r)){
int rs=0;
for(int j=q[i].l;j<=q[i].r;j++){
lt[a[j]]=min(lt[a[j]],j);
rt[a[j]]=max(rt[a[j]],j);
rs=max(rs,rt[a[j]]-lt[a[j]]);
}
for(int j=q[i].l;j<=q[i].r;j++){
lt[a[j]]=1<<30;
rt[a[j]]=0;
}
ans[q[i].v]=rs;
continue;
}
if(bl(q[i].l)!=lb){
memset(le,0x3f3f3f,sizeof(le));
memset(ri,0,sizeof(ri));
res=0;
lb=bl(q[i].l);
l=br(lb)+1;
r=br(lb);
}
while(r<q[i].r){
add(++r);
}
lp=l;
tp=res;
while(lp>q[i].l){
lp--;
s.push(lp);
s1.push(le[a[lp]]);
s2.push(ri[a[lp]]);
add(lp);
}
ans[q[i].v]=res;
res=tp;
while(!s.empty()){
int u=s.top(),u1=s1.top(),u2=s2.top();
s.pop(),s1.pop(),s2.pop();
le[a[u]]=u1;
ri[a[u]]=u2;
}
}
for(int i=1;i<=m;i++){
printf("%d\n",ans[i]);
}
}