#include<bits/stdc++.h> using namespace std; #define mp make_pair #define sec second int n, m; const int MAX = 1e5 + 7; const int INF = 0x3f3f3f3f; pair <int, int> P[MAX]; int bor[MAX]; int col[MAX]; int a[MAX]; int dmx[MAX][20]; void RMQ(int cnt) { for(int i = 1; i <= cnt; i++) dmx[i][0] = P[i].sec; for(int j = 1; (1 << j) <= cnt; j++) for(int i = 1; i + (1 << j) - 1 <= cnt; i++) dmx[i][j] = max(dmx[i][j - 1], dmx[i + (1 << (j - 1))][j - 1]); } int Query(int l, int r) { if(r - l + 1 <= 0) return 0; int k = 0; while(1 << (k + 1) <= r - l + 1) k++; return max(dmx[l][k], dmx[r - (1 << k) + 1][k]); } int solve(int l, int r) { int L = col[l], R = col[r]; if(L == R) return r - l + 1; return max(bor[L] - l + 1, max(r - bor[R - 1], Query(L + 1, R - 1))); } int main() { ios::sync_with_stdio(false); while(cin >> n && n){ cin >> m; a[0] = INF; int cnt = 0; for(int i = 1; i <= n; i++){ cin >> a[i]; if(a[i] != a[i - 1]){ P[++cnt] = mp(a[i], 1); bor[cnt] = bor[cnt - 1] + 1; } else{ P[cnt].sec++; bor[cnt]++; } col[i] = cnt; } RMQ(cnt); int l, r; while(m--){ cin >> l >> r; cout << solve(l, r) << endl; } } return 0; }
UVa 11235 Frequent values 【RMQ】
猜你喜欢
转载自blog.csdn.net/head_hard/article/details/80501730
今日推荐
周排行