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

Code

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll INF = 1e18;
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
int n, q;
cin >> n >> q;
vector<ll> arr(n);
for(auto &x: arr){
cin >> x;
}
// Build the segment tree
int size = 1;
while(size < n) size <<=1;
vector<ll> segtree(2*size, INF);
// Set the leaves
for(int i=0; i<n; ++i){
segtree[size + i] = arr[i];
}
for(int i=size-1; i>=1; --i){
segtree[i] = min(segtree[2*i], segtree[2*i +1]);
}
while(q--){
int type;
cin >> type;
if(type ==1){
int k;
ll u;
cin >> k >> u;
k--;
segtree[size + k] = u;
int pos = size + k;
while(pos >1){
pos /=2;
segtree[pos] = min(segtree[2*pos], segtree[2*pos +1]);
}
}
else if(type ==2){
int a, b;
cin >> a >> b;
a--; b--;
ll res = INF;
int l = size + a;
int r = size + b;
r++;
while(l < r){
if(l%2 ==1){
res = min(res, segtree[l]);
l++;
}
if(r%2 ==1){
r--;
res = min(res, segtree[r]);
}
l /=2;
r /=2;
}
cout << res << "\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