编号 题目 状态 分数 总时间 内存 代码 / 答案文件 提交者 提交时间
#5766 #1062. 序列分段 Compile Error 0 0 ms 0 K C++ 17 / 2.4 K s230004040 2024-08-17 15:12:04
显示原始代码
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

// 线段树节点
struct SegmentTree {
    vector<int> data;
    vector<int> maxTree;
    vector<int> minTree;

    // 构造函数
    SegmentTree(const vector<int>& arr) {
        int n = arr.size();
        data = arr;
        maxTree.resize(4 * n);
        minTree.resize(4 * n);
        build(0, 0, n - 1);
    }

    // 构建线段树
    void build(int node, int start, int end) {
        if (start == end) {
            maxTree[node] = data[start];
            minTree[node] = data[start];
        } else {
            int mid = (start + end) / 2;
            build(2 * node + 1, start, mid);
            build(2 * node + 2, mid + 1, end);
            maxTree[node] = max(maxTree[2 * node + 1], maxTree[2 * node + 2]);
            minTree[node] = min(minTree[2 * node + 1], minTree[2 * node + 2]);
        }
    }

    // 查询最大值
    int queryMax(int node, int start, int end, int L, int R) {
        if (R < start || end < L) {
            return INT_MIN;
        }
        if (L <= start && end <= R) {
            return maxTree[node];
        }
        int mid = (start + end) / 2;
        int leftMax = queryMax(2 * node + 1, start, mid, L, R);
        int rightMax = queryMax(2 * node + 2, mid + 1, end, L, R);
        return max(leftMax, rightMax);
    }

    // 查询最小值
    int queryMin(int node, int start, int end, int L, int R) {
        if (R < start || end < L) {
            return INT_MAX;
        }
        if (L <= start && end <= R) {
            return minTree[node];
        }
        int mid = (start + end) / 2;
        int leftMin = queryMin(2 * node + 1, start, mid, L, R);
        int rightMin = queryMin(2 * node + 2, mid + 1, end, L, R);
        return min(leftMin, rightMin);
    }
};

int main() {
    int n, q;
    cin >> n >> q;  // 读取数组长度和查询数量

    vector<int> a(n);
    for (int i = 0; i < n; ++i) {
        cin >> a[i];  // 读取数组元素
    }

    SegmentTree st(a);

    while (q--) {
        int l, r;
        cin >> l >> r;  // 读取查询范围
        --l;
        --r;  // 转为0索引

        int maxVal = st.queryMax(0, 0, n - 1, l, r);
        int minVal = st.queryMin(0, 0, n - 1, l, r);
        int cost = maxVal - minVal;  // 计算操作2的代价

        cout << cost << endl;  // 输出结果
    }

    return 0;
}

编译信息

/sandbox/1/a.cpp: In member function 'int SegmentTree::queryMax(int, int, int, int, int)':
/sandbox/1/a.cpp:39:20: error: 'INT_MIN' was not declared in this scope
   39 |             return INT_MIN;
      |                    ^~~~~~~
/sandbox/1/a.cpp:4:1: note: 'INT_MIN' is defined in header '<climits>'; did you forget to '#include <climits>'?
    3 | #include <algorithm>
  +++ |+#include <climits>
    4 | 
/sandbox/1/a.cpp: In member function 'int SegmentTree::queryMin(int, int, int, int, int)':
/sandbox/1/a.cpp:53:20: error: 'INT_MAX' was not declared in this scope
   53 |             return INT_MAX;
      |                    ^~~~~~~
/sandbox/1/a.cpp:53:20: note: 'INT_MAX' is defined in header '<climits>'; did you forget to '#include <climits>'?