/ SeriousOJ /

Record Detail

Compile Error

foo.cc: In function 'Node query(int, int, int, int, int)':
foo.cc:45:17: error: 'INT_MAX' was not declared in this scope
   45 |         return {INT_MAX, INT_MIN};
      |                 ^~~~~~~
foo.cc:3:1: note: 'INT_MAX' is defined in header '<climits>'; did you forget to '#include <climits>'?
    2 | #include <vector>
  +++ |+#include <climits>
    3 | 
foo.cc:45:26: error: 'INT_MIN' was not declared in this scope
   45 |         return {INT_MAX, INT_MIN};
      |                          ^~~~~~~
foo.cc:45:26: note: 'INT_MIN' is defined in header '<climits>'; did you forget to '#include <climits>'?
foo.cc:45:33: error: could not convert '{<expression error>, <expression error>}' from '<brace-enclosed initializer list>' to 'Node'
   45 |         return {INT_MAX, INT_MIN};
      |                                 ^
      |                                 |
      |                                 <brace-enclosed initializer list>

Code

#include <iostream>
#include <vector>

using namespace std;

const int N = 2e5 + 5;

struct Node {
    int min_val, max_val;
};

vector<Node> seg_tree;

void build(int node, int start, int end, vector<int>& arr) {
    if (start == end) {
        seg_tree[node].min_val = arr[start];
        seg_tree[node].max_val = arr[start];
        return;
    }
    int mid = (start + end) / 2;
    build(node * 2, start, mid, arr);
    build(node * 2 + 1, mid + 1, end, arr);
    seg_tree[node].min_val = min(seg_tree[node * 2].min_val, seg_tree[node * 2 + 1].min_val);
    seg_tree[node].max_val = max(seg_tree[node * 2].max_val, seg_tree[node * 2 + 1].max_val);
}

void update(int node, int start, int end, int idx, int val) {
    if (start == end) {
        seg_tree[node].min_val = val;
        seg_tree[node].max_val = val;
        return;
    }
    int mid = (start + end) / 2;
    if (idx <= mid) {
        update(node * 2, start, mid, idx, val);
    } else {
        update(node * 2 + 1, mid + 1, end, idx, val);
    }
    seg_tree[node].min_val = min(seg_tree[node * 2].min_val, seg_tree[node * 2 + 1].min_val);
    seg_tree[node].max_val = max(seg_tree[node * 2].max_val, seg_tree[node * 2 + 1].max_val);
}

Node query(int node, int start, int end, int l, int r) {
    if (start > r || end < l) {
        return {INT_MAX, INT_MIN};
    }
    if (start >= l && end <= r) {
        return seg_tree[node];
    }
    int mid = (start + end) / 2;
    Node left = query(node * 2, start, mid, l, r);
    Node right = query(node * 2 + 1, mid + 1, end, l, r);
    return {min(left.min_val, right.min_val), max(left.max_val, right.max_val)};
}

int main() {
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n, q;
    cin >> n >> q;
    vector<int> arr(n);
    for (int i = 0; i < n; i++) {
        cin >> arr[i];
    }

    seg_tree.resize(4 * n);
    build(1, 0, n - 1, arr);

    while (q--) {
        int type, l, r, x;
        cin >> type;
        if (type == 1) {
            cin >> l >> x;
            update(1, 0, n - 1, l - 1, x);
        } else {
            cin >> l >> r;
            Node ans = query(1, 0, n - 1, l - 1, r - 1);
            cout << (ans.max_val <= ans.min_val ? "YES" : "NO") << endl;
        }
    }
    return 0;
}

Information

Submit By
Type
Pretest
Problem
P1085 Sorted or !Sorted
Language
C++11 (G++ 13.2.0)
Submit At
2024-08-16 16:15:23
Judged At
2024-08-16 16:15:23
Judged By
Score
0
Total Time
0ms
Peak Memory
0 Bytes