| Task: | Dynamic Range Minimum Queries |
| Sender: | duongha |
| Submission time: | 2025-09-22 00:11:01 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.01 s | details |
| #2 | ACCEPTED | 0.35 s | details |
Code
#include <bits/stdc++.h>
using namespace std;
const int MAXN =(2e5 + 1) * 4; // maximum index size is 4n
long long n, q, t, a, b;
long long f[MAXN];
void update(long long x, long long l, long long r, long long u, long long v) {
if (l > u or u > r) return;
if (l == r) {
f[x] = v;
return;
}
long long mid = (l + r) / 2;
// cout << l << ' ' << mid << ' ' << r << endl;
update(x * 2, l, mid, u, v);
update(x * 2 + 1, mid + 1, r, u, v);
f[x] = min(f[x * 2], f[x * 2 + 1]);
}
long long find(long long x, long long l, long long r, long long u, long long v) {
if (r < u or l > v or l > r) return 1e18;
if (l >= u and r <= v) return f[x];
long long mid = (l + r) / 2;
return min(find(x * 2, l, mid, u, v), find(x * 2 + 1, mid + 1, r, u, v));
}
void solve() {
cin >> n >> q;
fill(f, f + MAXN, (long long)1e18);
for(int i = 1; i <= n; i++) {
long long temp;
cin >> temp;
update(1, 1, n, i, temp);
}
for(int i = 1; i <= q; i++) {
cin >> t >> a >> b;
if (t == 1) {
update(1, 1, n, a, b);
} else {
cout << find(1, 1, n, a, b) << endl;
}
}
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
solve();
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 ... 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 |
