#include<bits/stdc++.h>
using namespace std;
inline int read()
{
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-48;ch=getchar();}
return x*f;
}
const int MAXN=1e5+5,MAXLOG=20;
int Max[MAXN][MAXLOG];
int n,q;
int Query(int l,int r)
{
int k=log2(r-l+1);
return max(Max[l][k],Max[r-(1<<k)+1][k]);
}
int a[MAXN],val[MAXN],cnt[MAXN];
int num[MAXN],l[MAXN],r[MAXN];
int main()
{
while(scanf("%d",&n))
{
if(n==0)
return 0;
q=read();
int meg=0;
for(int i=1;i<=n;i++)
{
a[i]=read();
if(i==1)
{
num[i]=++meg;
l[meg]=i;
val[meg]=a[i];
}
else if(a[i]!=a[i-1])
{
r[meg]=i-1;
cnt[meg]=r[meg]-l[meg]+1;
num[i]=++meg;
l[meg]=i;
val[meg]=a[i];
}
else
num[i]=meg;
}
r[meg]=n,cnt[meg]=r[meg]-l[meg]+1;
//for(int i=1;i<=meg;i++)
// Max[i][0]=cnt[i];
//for(int j=1;j<=MAXLOG;j++)
// for(int i=1;i+(1<<j)-1<=n;i++)
// Max[i][j]=max(Max[i][j-1],Max[i+(1<<(j-1))][j-1]);
for(int i=1;i<=q;i++)
{
int L,R;
L=read(),R=read();
if(num[L]==num[R])
printf("%d\n",R-L+1);
else
{
int ans=0;
//if(num[L]+1<=num[R]-1)
// ans=max(Query(num[L]+1,num[R]-1),ans);
ans=max(r[num[L]-L+1],ans);
ans=max(R-l[num[R]]+1,ans);
printf("%d\n",ans);
}
}
}
return 0;
}
把ST表注释了交上去还是RE qwq
求助