题目链接:
题目大意:
给出一个n个数长度的串。 m个询问
求出给定范围内的最大连续字符串的长度
方法:
RMQ模板, 记录每一个位置的数连续的次数。用RMQ求出每一个区间的最大连续字符的长度值
#include#include #include #include #include using namespace std;const int maxn = 100010;int A[maxn];int Max[maxn][20];int f[maxn];void RMQ(int n){ int k = (int )(log(n) / log(2)); for(int j=1; j<=k; j++) for(int i=1; i<=n; i++) if(i + (1< 1) f[i] = f[i-1] + 1; else { f[i]++; } Max[i][0] = f[i]; } RMQ(n); //for(int i=1; i<=n; i++) // printf("%d ",f[i]); while(q--){ int a, b; scanf("%d%d",&a,&b); int t = a; while(t <= b && A[t] == A[t-1]) t++; int k = (int )(log(b-t+1)/log(2)); int ans; if(t > b) ans = 0; else ans = max(Max[t][k], Max[b-(1<