| Task: | Dynamic Range Minimum Queries |
| Sender: | Abduvohid |
| Submission time: | 2025-09-18 21:38:56 +0300 |
| Language: | C++ (C++17) |
| Status: | READY |
| Result: | WRONG ANSWER |
| test | verdict | time | |
|---|---|---|---|
| #1 | WRONG ANSWER | 0.00 s | details |
| #2 | TIME LIMIT EXCEEDED | -- | details |
Code
// g++ -std=c++17 -O2 -pipe -Wall -Wextra a.cpp -o a
#include <bits/stdc++.h>
using namespace std;
const int MOD = 1'000'000'007;
const int INF = 1e9;
#define ll long long
#define fast \
ios::sync_with_stdio(false); \
cin.tie(nullptr);
struct SegmentTree
{
int n;
vector<ll> seg;
SegmentTree(const vector<ll> &a)
{
n = (int)a.size();
seg.assign(4 * n, INF);
build(0, 0, n - 1, a);
}
void build(int node, int l, int r, const vector<ll> &a)
{
if (l == r)
{
seg[node] = a[l];
return;
}
int mid = (l + r) / 2;
int left = 2 * node + 1; // left child
int right = 2 * node + 2; // right child
build(left, l, mid, a);
build(right, mid + 1, r, a);
seg[node] = min(seg[left], seg[right]);
}
void update(int idx, ll val)
{
update(0, 0, n - 1, idx, val);
}
void update(int node, int l, int r, int idx, ll val)
{
if (l == r)
{
seg[node] = val;
return;
}
int mid = (l + r) / 2;
int left = 2 * node + 1;
int right = 2 * node + 2;
update(left, l, mid, idx, val);
update(right, mid + 1, r, idx, val);
seg[node] = min(seg[left], seg[right]);
}
// minimum range on [ql, qr]
ll query(int ql, int qr)
{
return query(0, 0, n - 1, ql, qr);
}
ll query(int node, int l, int r, int ql, int qr)
{
if (qr < l || r < ql)
return INF;
if (ql <= l && r <= qr)
return seg[node];
// partial part
int mid = (l + r) / 2;
int left = 2 * node + 1;
int right = 2 * node + 2;
return min(query(left, l, mid, ql, qr),
query(right, mid + 1, r, ql, qr));
}
};
int main()
{
fast;
int n, q;
cin >> n >> q;
vector<ll> a(n);
for (int i = 0; i < n; ++i)
cin >> a[i];
SegmentTree st(a); // SEGMENT TREE
while (q--)
{
int type;
cin >> type;
if (type == 1)
{
int id, val;
cin >> id >> val;
id--;
st.update(id, val);
}
else
{
int ql, qr;
cin >> ql >> qr;
ql--;
qr--;
cout << st.query(ql, qr) << '\n';
}
}
return 0;
}
Test details
Test 1
Verdict: WRONG ANSWER
| 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: TIME LIMIT EXCEEDED
| input |
|---|
| 200000 200000 398739055 65343131 699208332 3... |
| correct output |
|---|
| 28609 129890 20378 20378 311522 ... |
| user output |
|---|
| (empty) |
