RMQ的st表实现 
原理见 https://www.luogu.com.cn/problem/P3865
模板很简单,就是倍增思想
c++
int rmq[N][21], lg[N], n, m;
int query(int l, int r) {
    int p = lg[r - l + 1];
    return max(rmq[l][p], rmq[r - (1 << p) + 1][p]);
}
	cin >> n >> m;
    for (int i = 1; i <= n; i++) {
        cin >> rmq[i][0];
        if (i == 1) {
            lg[i] = 0;
        } else {
            lg[i] = lg[i >> 1] + 1;
        }
    }
    for (int p = 1, len = 2; p <= 20; p++, len <<= 1) {
        for (int i = 1; i + len - 1 <= n; i++) {
            rmq[i][p] = max(rmq[i][p - 1], rmq[i + len / 2][p - 1]);
        }
    }
    while (m -- ) {
        int x, y;
        cin >> x >> y;
        cout << query(x, y) << endl;
    }