Submission details
Task:Dynamic Range Minimum Queries
Sender:usvafe
Submission time:2025-09-21 03:12:12 +0300
Language:C++ (C++17)
Status:READY
Result:ACCEPTED
Test results
testverdicttime
#1ACCEPTED0.00 sdetails
#2ACCEPTED0.45 sdetails

Code

#include <bits/stdc++.h>
using namespace std;
using ll = long long;

const int NMX = 524288;
ll ar[NMX];

void update(int k, ll x) {
	ar[k] = x;
	for (k /= 2; k >= 1; k /= 2) {
		ar[k] = min(ar[2*k], ar[2*k+1]);
	}
}

ll find_min(int a, int b) {
	ll m = LLONG_MAX;
	while (a <= b) {
		if (a%2 == 1) {
			m = min(m, ar[a]);
			a++;
		}
		if (b%2 == 0) {
			m = min(m, ar[b]);
			b--;
		}
		a /= 2;
		b /= 2;
	}
	return m;
}

int main() {
	int n, q;
	cin >> n >> q;
	int p = 1;
	while (p < n) p*=2;
	
	for (int i=p; i<2*p; i++) {
		ar[i] = LLONG_MAX;
	}
	for (int i=0; i<n; i++) {
		int b;
		cin >> b;
		update(i+p, b);
	}
	vector<ll> outs;
	outs.reserve(q);
	for (int i=0; i<q; i++) {
		int c;
		ll a, b;
		cin >> c >> a >> b;
		if (c == 1) update(a+p-1, b);
		if (c == 2) outs.push_back(find_min(a+p-1, b+p-1));
	}
	for (auto i : outs) {
		cout << i << 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
...
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