RE,求调
查看原帖
RE,求调
595697
Papy楼主2024/1/9 13:00

query函数不知道为什么就RE了

#include <iostream>
#include <cstdio>
typedef long long ll;
typedef double lf;
using namespace std;
const int INF = 1e9+7;
const int maxn = 1e5+5;
const int maxk = 25;
int n, m;
int a[maxn];
int st[maxn][maxk];
int l, r;

void buildST(){
    for (int i = 1; i <= n; i++)
        st[i][0] = a[i];
    
    for (int j = 1; (1<<j) <= n; j++)
        for (int i = 1; i+(1<<j)-1 <= n; i++)
            st[i][j] = max(st[i][j-1], st[i+(1<<(j-1))][j-1]);
}

//RE
int query(int l, int r){
    int len = r-l+1;
    int k = maxk;
    while((1<<k) >= len)
        k--;

    return max(st[l][k], st[r-(1<<k)+1][k]);
}

int main(){
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++){
        scanf("%d", &a[i]);
    }
    
    buildST();
    for (int i = 1; i <= m; i++){
        scanf("%d %d", &l, &r);
        printf("%d\n", query(l, r));
    }



    return 0;
}

改成:

int query(int l, int r){
    int len = r-l+1;
    int k = 0;
    while((1<<(k+1)) <= len)
        k++;

    return max(st[l][k], st[r-(1<<k)+1][k]);
}

就不RE了??? 哪位大佬能帮我解释一下TAT

2024/1/9 13:00
加载中...