RE求助(样例已过)

UVA11235 Frequent values

```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


|