CSES - Aalto Competitive Programming 2024 - wk4 - Homework - Results
Submission details
Task:Dynamic Range Minimum Queries
Sender:bubu2006
Submission time:2024-09-18 23:11:10 +0300
Language:C++ (C++20)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.17 sdetails

Compiler report

input/code.cpp: In function 'void build(long long int, long long int, long long int)':
input/code.cpp:18:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   18 |     int m = lx + rx >> 1;
      |             ~~~^~~~
input/code.cpp: In function 'void upd(long long int, long long int, long long int, long long int, long long int)':
input/code.cpp:29:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   29 |     int m = lx + rx >> 1;
      |             ~~~^~~~
input/code.cpp: In function 'long long int que(long long int, long long int, long long int, long long int, long long int)':
input/code.cpp:38:16: warning: suggest parentheses around '+' inside '>>' [-Wparentheses]
   38 |     int m = lx + rx >> 1;
      |             ~~~^~~~

Code

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 2e5 + 5;
const int INF = 1e9;
int n, q;
int a[N];
int nd[N << 2];
void build(int x, int lx, int rx) {
if (lx == rx) {
nd[x] = a[lx];
return;
}
int m = lx + rx >> 1;
build(x << 1, lx, m);
build(x << 1 | 1, m + 1, rx);
nd[x] = min(nd[x << 1], nd[x << 1 | 1]);
}
void upd(int i, int v, int x, int lx, int rx) {
if (lx == rx) {
nd[x] = v;
return;
}
int m = lx + rx >> 1;
if (i <= m) upd(i, v, x << 1, lx, m);
else upd(i, v, x << 1 | 1, m + 1, rx);
nd[x] = min(nd[x << 1], nd[x << 1 | 1]);
}
int que(int l, int r, int x, int lx, int rx) {
if (lx > r || rx < l) return INF;
if (l <= lx && rx <= r) return nd[x];
int m = lx + rx >> 1;
return min(que(l, r, x << 1, lx, m), que(l, r, x << 1 | 1, m + 1, rx));
}
signed main() {
cin.tie(0)->sync_with_stdio(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
build(1, 1, n);
while (q--) {
int tt;
cin >> tt;
if (tt == 1) {
int k, u;
cin >> k >> u;
upd(k, u, 1, 1, n);
} else {
int l, r;
cin >> l >> r;
cout << que(l, r, 1, 1, n) << '\n';
}
}
}

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