Submission details
Task:Dynamic Range Minimum Queries
Sender:aalto26dh_045
Submission time:2026-09-19 20:53:19 +0300
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.49 sdetails

Code

#include <iostream>
#include <algorithm>
#include <vector>
#include <cstdint>

using namespace std;

long long minTree(const vector<long long>& tree, long long a, long long b)
{
    long long n = tree.size() / 2;
    a--;
    b--;
    a += n;
    b += n;

    long long minVal = 10e9+1;
    while (a <= b)
    {
        if (a % 2 == 1)
        {
            minVal = min(minVal, tree[a++]);
        }
        if (b % 2 == 0)
        {
            minVal = min(minVal, tree[b--]);
        }
        a /= 2;
        b /= 2;
    }
    return minVal;
}

void add(vector<long long>& tree, long long k, long long u)
{
    k--;
    long long n = tree.size() / 2;
    k += n;
    tree[k] = u;
    for (k /= 2; k > 0; k /= 2)
    {
        tree[k] = min(tree[2 * k], tree[2 * k + 1]);
    }
}

int main()
{
    long long n, q;
    cin >> n >> q;

    vector<long long> segmentTree(2 * n);
    for (long long i = n; i < 2 * n; i++)
    {
        cin >> segmentTree[i];
    }
    for (long long i = n - 1; i > 0; i--)
    {
        segmentTree[i] = min(segmentTree[2 * i], segmentTree[2 * i + 1]);
    }
    for (long long i = 0; i < q; i++)
    {
        long long op, a, b;
        cin >> op >> a >> b;
        if (op == 1)
        {
            add(segmentTree, a, b);
        }
        else
        {
            cout << minTree(segmentTree, a, b) << 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
...

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
...