#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 10; long long dp[N][25], a[N]; int query(int l, int r) { int j = (int)log2(r - l + 1); return max(dp[l][j], dp[r - (1 << j) + 1][j]); } inline int read() { int x = 0, f = 1; char ch = getchar(); while (ch < '0' || ch>'9') { if (ch == '-') f = -1; ch = getchar(); } while (ch >= '0' && ch <= '9') { x = x * 10 + ch - 48; ch = getchar(); } return x * f; }

int main() { int i, j, n, m; cin >> n >> m; for (i = 1; i <= n; i++) { cin >> a[i]; } for (i = 1; i <= n; i++) { dp[i][0] = a[i]; } for (j = 1; j <= log2(n); j++) { for (i = 1; i + (1 << j) - 1 <= n; i++) { dp[i][j] = max(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]); } } int l, r; while (m--) { l = read(); r = read(); cout << query(l, r) << endl; } return 0; }

0 comments

No comments so far...