```cpp
#include<bits/stdc++.h>
#define NUM 110000
using namespace std;
int n,q;
int b[NUM];
int c[NUM];
int cnt;
int l[NUM],r[NUM],num[NUM];
int f[NUM][50];
int ans;
void clean()
{
for( int i = 1; i <= n; i++)
{
b[i] = 0;
c[i] = 0;
l[i] = 0, r[i] = 0, num[i] = 0;
}
memset(f,0,sizeof(f));
}
int main()
{
while(1)
{
scanf("%d",&n);
if(!n) break;
clean();
scanf("%d",&q);
int tmp = NUM;
for(int i = 1; i <= n; i++)
{
scanf("%d",&b[i]);
if( b[i] != tmp ) r[cnt] = i-1,l[++cnt] = i,tmp = b[i];
num[i] = cnt;
}
r[cnt] = b[n];
for(int i = 1; i <= n; i++)
{
int tmpp = num[i];
c[i] = r[tmpp] - l[tmpp] + 1;
f[i][0] = c[i];
}
for(int j = 1; j <= int( log2(n) ); j++)
for(int i = 1; i <= n; i++)
{
f[i][j] = max( f[i][j-1] ,f[ i + ( 1<<(j-1) ) ][j-1] );
}
for(int i = 1; i <= q; i++)
{
int x,y;
scanf("%d%d",&x,&y);
if( num[x] == num[y] ) ans = num[y] - num[x] + 1;
else
{
if( num[x] + 1 <= num[y] - 1)
{
int ll = r[ num[x] ] + 1;
int rr = l[ num[y] ] - 1;
int len = int ( log2(rr - ll + 1) );
ans = max( f[ll][len] ,f[rr - (1<<len) + 1][len]);
}
int tmpp = max( r[ num[x] ] - x + 1 ,y - l[ num[y] ] +1 );
ans = max( tmpp ,ans);
}
printf("%d\n",ans);
}
}
}
```
by 周凸加油 @ 2020-01-10 22:11:24
return 0;
by MCH_Satrimiten @ 2020-01-10 22:13:31
@[静以修身](/user/219570) still RE
by 周凸加油 @ 2020-01-11 22:05:29