st表模板

点击查看代码
#include <bits/stdc++.h>

using namespace std;

const int N = 2000001;
const int logN = 21;

int f[N][logN + 1], lg[N + 1];
//vector<int>可能会爆内存

void pre(){
    lg[1] = 0;
    lg[2] = 1;
    for(int i = 3; i < N; i ++){
        lg[i] = lg[i >> 1] + 1;
    }
}

void solve(){
    int n,m;
    cin >> n >> m;
    for(int i = 1; i <= n; i ++){
        cin >> f[i][0];
    }
    pre();
    for(int j = 1; j <= logN; j ++){
        for(int i = 1; i + (1 << j) - 1 <= n; i ++){
            f[i][j] = max(f[i][j - 1],f[i + (1 << (j - 1))][j - 1]);

        }
    }
    while(m --){
        int x,y;
        cin >> x >> y;
        int s = lg[y - x + 1];
        cout << max(f[x][s],f[y - (1 << s) + 1][s]) << '\n';
    }
}

int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    int t = 1;
    //cin >> t;
    while(t --){
        solve();
    }
    return 0;
}
posted @ 2025-10-09 15:48  ha000star  阅读(9)  评论(0)    收藏  举报