Submission details
Task:Dynamic Range Minimum Queries
Sender:Dereden
Submission time:2025-09-21 13:06:38 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.26 sdetails

Code

#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <climits>

using namespace std;

template<class T, class Op>
struct SegTree {
    int n;
    T ID;
    Op op;
    vector<T> st;

    SegTree(int n = 0, T ID = T(), Op op = Op()) { init(n, ID, op); }

    void init(int n_, T ID_, Op op_ = Op()) {
        n = n_;
        ID = ID_;
        op = op_;
        st.assign(2 * n, ID);
    }

    void build(const vector<T> &a) {
        n = (int) a.size();
        st.assign(2 * n, ID);
        for (int i = 0; i < n; i++) st[n + i] = a[i];
        for (int i = n - 1; i > 0; i--) st[i] = op(st[i << 1], st[i << 1 | 1]);
    }

    void set(int i, T v) {
        for (st[i += n] = v; i > 1; i >>= 1)
            st[i >> 1] = op(st[i], st[i ^ 1]);
    }

    T query(int l, int r) const {
        T resL = ID, resR = ID;
        for (l += n, r += n + 1; l < r; l >>= 1, r >>= 1) {
            if (l & 1) resL = op(resL, st[l++]);
            if (r & 1) resR = op(st[--r], resR);
        }
        return op(resL, resR);
    }
};

struct MinOp {
    long long operator()(long long a, long long b) const {
        return min(a, b);
    }
};

const long long MIN_ID = LLONG_MAX;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // freopen("input.txt", "r", stdin); // TODO: REMOVE THIS YOU STUPID ****

    int n, q;
    cin >> n >> q;
    vector<long long> origValues(n);
    for (int i = 0; i < n; i++) {
        cin >> origValues[i];
    }
    auto tree = SegTree(n, MIN_ID, MinOp());
    tree.build(origValues);
    for (int i = 0; i < q; i++) {
        int oper, a, b;
        cin >> oper >> a >> b;
        if (oper == 1) {
            tree.set(a-1, b);
        } else {
            cout << tree.query(a-1, b-1) << endl;
        }
    }
}

Test details

Test 1

Verdict: ACCEPTED

input
8 80
7 6 4 6 2 9 4 8
2 1 1
2 1 2
2 1 3
...

correct output
7
6
4
4
2
...

user output
7
6
4
4
2
...
Truncated

Test 2

Verdict: ACCEPTED

input
200000 200000
398739055 65343131 699208332 3...

correct output
28609
129890
20378
20378
311522
...

user output
28609
129890
20378
20378
311522
...
Truncated