| Task: | Dynamic Range Minimum Queries |
| Sender: | aalto26dh_004 |
| Submission time: | 2026-09-23 15:33:37 +0300 |
| Language: | C++ (C++20) |
| Status: | READY |
| Result: | ACCEPTED |
| test | verdict | time | |
|---|---|---|---|
| #1 | ACCEPTED | 0.00 s | details |
| #2 | ACCEPTED | 0.54 s | details |
Compiler report
input/code.cpp: In function 'int main()':
input/code.cpp:36:18: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
36 | } else if (m < mins.size()) {
| ~~^~~~~~~~~~~~~Code
#include "iostream"
#include "cmath"
#include "climits"
#include "algorithm"
#include "vector"
int main() {
int n, q;
std::cin >> n >> q;
int m = (std::sqrt(n));
if (n > 0 && m == 0) m = 1;
std::vector<int> array(n);
std::vector<int> mins(m + 1);
for (int i = 0; i < m; i++) {
int Idx = i * m;
for (int j = 0; j < m; j++) {
if (Idx + j < n) {
std::cin >> array[Idx + j];
} else {
break;
}
}
if (Idx < n) {
int end = std::min((i + 1) * m, n);
mins[i] = *std::min_element(array.begin() + Idx, array.begin() + end);
} else {
mins[i] = INT_MAX;
}
}
int rest = n - m * m;
for (int i = 0; i < rest; i++) {
std::cin >> array[m * m + i];
}
if (rest > 0) {
mins[m] = *std::min_element(array.begin() + m * m, array.begin() + n);
} else if (m < mins.size()) {
mins[m] = INT_MAX;
}
std::vector<int> queries(3);
for (int i = 0; i < q; i++) {
std::cin >> queries[0] >> queries[1] >> queries[2];
int idx = (queries[1] - 1) / m;
if (queries[0] == 1) {
array[queries[1] - 1] = queries[2];
int block_start = idx * m;
int block_end = std::min((idx + 1) * m, n);
mins[idx] = *std::min_element(array.begin() + block_start, array.begin() + block_end);
} else {
int tmp = INT_MAX;
int idx2 = (queries[2] - 1) / m;
if (idx == idx2) {
for (int j = queries[1] - 1; j <= queries[2] - 1; ++j) {
tmp = std::min(tmp, array[j]);
}
} else {
for (int j = queries[1] - 1; j < (idx + 1) * m; ++j) {
tmp = std::min(tmp, array[j]);
}
for (int j = idx + 1; j < idx2; ++j) {
tmp = std::min(tmp, mins[j]);
}
for (int j = idx2 * m; j <= queries[2] - 1; ++j) {
tmp = std::min(tmp, array[j]);
}
}
std::cout << tmp << std::endl;
}
}
}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 ... |
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 ... |
