Pagini recente » Cod sursa (job #2517570) | Cod sursa (job #2889405) | Cod sursa (job #3280901) | Cod sursa (job #1390674) | Cod sursa (job #3218689)
#include <iostream>
#include <fstream>
#include <stdint.h>
int32_t max(int32_t x, int32_t y) {
return (x > y) ? x : y;
}
const int32_t MAX_N = 100000;
const int32_t MAX_TREE = 1 << 18;
int32_t n, nLog2;
int32_t tree[MAX_TREE];
int32_t MaxInterval(int32_t a, int32_t b, int32_t ind = 1, int32_t start = 1, int32_t end = n) {
if(start >= a && end <= b)
return tree[ind];
if(start > end || end < a || start > b)
return 0;
int32_t mij = (start + end) >> 1;
int32_t val1 = 0, val2 = 0;
if(a <= mij)
val1 = MaxInterval(a, b, (ind << 1), start, mij);
if(b >= mij)
val2 = MaxInterval(a, b, (ind << 1) + 1, mij + 1, end);
return max(val1, val2);
}
void Insert(int32_t target, int32_t val, int32_t ind = 1, int32_t start = 1, int32_t end = n) {
if(start == end) {
tree[ind] = val;
return;
}
int32_t mij = (start + end) >> 1;
if(target <= mij) {
Insert(target, val, (ind << 1), start, mij);
} else {
Insert(target, val, (ind << 1) + 1, mij + 1, end);
}
tree[ind] = max(tree[(ind << 1)], tree[(ind << 1) + 1]);
}
int main() {
std::ifstream fin("arbint.in");
std::ofstream fout("arbint.out");
int32_t m;
fin >> n >> m;
for(; (1 << nLog2) < n; ++nLog2);
for(int32_t i = 1; i <= n; ++i) {
int32_t val;
fin >> val;
Insert(i, val);
}
for(int32_t i = 0; i != m; ++i) {
int32_t c, a, b;
fin >> c >> a >> b;
if(c == 0) {
fout << MaxInterval(a, b) << '\n';
} else {
Insert(a, b);
}
}
fin.close();
fout.close();
return 0;
}