为 RMQ 构建稀疏表后出现不需要的值

问题描述 投票:0回答:1

我正在尝试构建一个稀疏表来处理 RMQ。

但由于某种原因,它在输出结束时不断返回不需要的额外值。

例如,如果输入是:

8
8 5 3 9 7 3 4 2
2
1 7
2 8

那么输出应该是:

8 5 3 9 7 3 4 2
5 3 3 7 3 3 2
3 3 3 3 2
2

但它返回的是这个:

8 5 3 9 7 3 4 2
5 3 3 7 3 3 2
3 3 3 3 2
2
5

这是我的代码:

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 1000; 
const int LOG = 10;   

int st[MAXN][LOG]; 
int a[MAXN];       
int manglog[MAXN + 1];

void logs(int n) {
    manglog[1] = 0;
    for (int i = 2; i <= n; i++) {
        manglog[i] = manglog[i / 2] + 1;
    }
}

void sparse(int n) {
    for (int i = 1; i <= n; i++) {
        st[0][i] = a[i];
    }
    for (int p = 1; p <= __lg(n); p++) {
        for (int i = 1; i + (1 << p) <= n+1; i++) {
            st[p][i] = min(st[p-1][i], st[p-1][i + (1 << (p-1))]);
        }
    }

   for(int p = 0; p <= __lg(n); p++) {
        for (int i = 1; i + (1 << p) <= n+1; i++) {
            cout << st[p][i];
            if (i + (1 << p) <= n) {
                cout << " ";
            }
        }
        cout << endl;
    }
}

int minntv(int L, int R) {
    int j = manglog[R - L + 1];
    return min(st[j][L], st[j][R - (1 << j) + 1]);
}

int main() {
    int n;
    cin >> n;

    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    logs(n); sparse(n);

    int l, r;
    cin >> l >> r;

    cout << minntv(l, r) << endl;

    return 0;
}

我尝试过的:

Verified the loop conditions to ensure they don't go beyond the range of the array.

Checked the logic used to initialize and populate the Sparse Table.

我的期望:我期望稀疏表能够正确构建,并且该函数仅打印最小值,最后没有任何额外的值。

实际发生的情况:该函数打印了正确的值,但在输出末尾包含了一个附加值。

c++
1个回答
-1
投票

为什么使用这条线? 计算<< minntv(l, r) << endl; this line outputs "5" is this right?

© www.soinside.com 2019 - 2024. All rights reserved.