10pts求助
查看原帖
10pts求助
309555
nofe楼主2022/11/8 20:59

我这个人码风比较Modern C++,不过应该不影响阅读

#include <iostream>
#include <cmath>

using namespace std;

constexpr const int maxn = 180010;

long long cow[maxn];
long long maxf[maxn][21], minf[maxn][21];
long long n, q, a, b;

auto st_preprocess() -> void{
    for(int i = 1; i <= n; i++){
        maxf[i][0] = cow[i];
        minf[i][0] = cow[i];
    }
    for (int j = 1; j <= 16; j++)
        for(int i = 1; i <= n - (1 << j) + 1; i++){
            maxf[i][j] = max(maxf[i][j - 1], minf[i + (1 << (j - 1))][j - 1]);
            minf[i][j] = min(minf[i][j - 1], minf[i + (1 << (j - 1))][j - 1]);
        }
}

auto st_query(long long l, long long r) -> long long{
    long long k = log2(r - l + 1);
    long long x = max(maxf[l][k], maxf[r - (1 << k) + 1][k]);
    long long y = min(minf[l][k], minf[r - (1 << k) + 1][k]);
    return x - y;
}

auto main() -> int {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    cin >> n >> q;
    for(int i = 1; i <= n; i++){
        cin >> cow[i];
    }
    st_preprocess();
    for(int i = 0; i < q; i++){
        cin >> a >> b;
        cout << st_query(a, b) << endl;
    }
    return 0;
}

2022/11/8 20:59
加载中...