给定n长的序列, query次询问
下面n个数表示询问
对于每次询问的区间,回答该区间连续相同的数 这样的段最长有多长
思路:
RMQ裸题
特判下左右端点然后中间部分RMQ即可
#include#include #include #include using namespace std; const int MAXN = 100100; int n,query; int A[MAXN]; int FMin[MAXN][20],FMax[MAXN][20]; void Init(){ int i,j; for(i=1;i<=n;i++) FMin[i][0]=FMax[i][0]=A[i]; for(i=1;(1< b)swap(a,b); L = r[a]; if(L>=b){printf(%d , b-a+1);continue;} R = l[b]; if(R<=a){printf(%d , b-a+1);continue;} int ans = max(L-a+1, b-R+1); if(L == R-1){printf(%d , ans);continue;} L++, R--; printf(%d , max( ans, Query(L,R))); } } return 0; } /* 8 4 -1 -1 1 1 1 1 3 10 2 3 1 1 8 8 1 8 1 1 1 1 1 2 3 1 2 1 1 1 2 2 2 0 */