Pagini recente » Cod sursa (job #1996022) | Cod sursa (job #2795160) | Cod sursa (job #58613) | Borderou de evaluare (job #1900536) | Cod sursa (job #2163169)
#include <fstream>
using namespace std;
int n, op, poz, val, maxim, start, finish, a, b, cod;
int arb[500005];
void update(int nod, int left, int right) {
if (left == right)
arb[nod] = val;
else {
int m = (left+right)/2;
if (poz <= m)
update(2*nod, left, m);
else
update(2*nod+1, m+1, right);
arb[nod] = max(arb[2*nod], arb[2*nod+1]);
}
}
void query(int nod, int left, int right) {
if (start <= left and right <= finish) {
maxim = max(maxim, arb[nod]);
return;
}
int m = (left+right)/2;
if (start <= m)
query(2*nod, left, m);
if (m < finish)
query(2*nod+1, m+1, right);
}
int main () {
ifstream fi("arbint.in");
ofstream fo("arbint.out");
fi >> n >> op;
for (int i = 1; i <= n; i++)
fi >> val, poz = i, update(1, 1, n);
for (int i = 1; i <= op; i++) {
fi >> cod >> a >> b;
if (cod == 0) {
start = a, finish = b;
maxim = -1;
query(1, 1, n);
fo << maxim << '\n';
}
else
poz = a, val = b, update(1, 1, n);
}
return 0;
}