Pagini recente » Cod sursa (job #1426713) | Cod sursa (job #2398758) | Cod sursa (job #2534926) | Cod sursa (job #1677675) | Cod sursa (job #2242896)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int value, v[100001*5], n, op, start, finish, poz, maxim;
void update(int nod, int left, int right) {
if (left == right){
v[nod] = value;
return;
}
int m = (left + right) /2;
if (poz <= m) {
update(nod * 2, left, m);
}
else update(nod * 2 + 1 , m + 1 , right);
v[nod] = max(v[2 * nod], v[2 * nod + 1]);
}
void query(int nod, int left, int right) {
if (start <= left && finish >= right) {
maxim = max(maxim, v[nod]);
return;
}
int m = (left + right) / 2;
if (start <= m)
query(nod * 2, left, m);
if (finish > m)
query(nod * 2 + 1, m + 1, right);
}
int main() {
in >> n >> op;
for (int i = 1; i <= n; i++) {
poz = i;
in >> value;
update(1, 1, n);
}
for (int i =1; i <= op; i++) {
int c;
in >> c;
if (c == 1) {
in >> poz >> value;
update(1, 1, n);
}
else {
maxim = -1;
in >> start >> finish;
query(1, 1, n);
out << maxim << "\n";
}
}
return 0;
}