| Task: | Dynamic Range Minimum Queries |
| Sender: | aalto26dh_005 |
| Submission time: | 2026-09-21 11:23:43 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.51 s | details |
Code
#include <iostream>
#include <vector>
#include <utility>
using namespace std;
#define BIG 9999999999
void update(int k, long v, int n, vector<long> &d) {
k += n;
d[k] = v;
for (k /= 2; k >= 1; k/=2) {
d[k] = min(d[2*k], d[2*k+1]);
}
}
long get(int a, int b, int n, vector<long> &d) {
a += n; b += n;
long m = BIG;
while (a <= b) {
if (a%2 == 1) m = min(m, d[a++]);
if (b%2 == 0) m = min(m, d[b--]);
a /= 2; b /= 2;
}
return m;
}
int main(){
int n, q;
cin >> n >> q;
long long tmax = 1;
while (tmax < n * 2) {
tmax <<= 1;
}
vector<long> d(tmax, BIG);
for (int i = 0; i < n; ++i) {
long v;
cin >> v;
update(i, v, n, d);
}
vector<vector<int>> qs(q, vector<int>(3));
for (int i = 0; i < q; ++i) {
for (int j = 0; j < 3; ++j) {
cin >> qs[i][j];
}
}
for (auto q : qs) {
if (q[0] == 1) {
update(q[1] -1, q[2], n, d);
} else {
cout << get(q[1] -1, q[2] -1, n, d) << endl;
}
}
return 0;
}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 ... |
