Pagini recente » Cod sursa (job #997421) | Cod sursa (job #3201562) | Cod sursa (job #555233) | Cod sursa (job #1660685) | Cod sursa (job #1925826)
#include <fstream>
using namespace std;
int n, op, pos, val, start, finish, maxim, x, a, b, tip, maxarb[500001];
void update (int nod, int l, int r) {
int m;
if (l == r)
maxarb[nod] = val;
else {
m = (l+r)/2;
if (pos <= m)
update(2*nod, l, m);
else
update(2*nod+1, m+1, r);
maxarb[nod] = max(maxarb[2*nod], maxarb[2*nod+1]);
}
}
void query (int nod, int l, int r) {
int m;
if (start <= l and r <= finish) {
maxim = max(maxim, maxarb[nod]);
return;
}
m = (l+r)/2;
if (start <= m)
query(2*nod, l, m);
if (m < finish)
query(2*nod+1, m+1, r);
}
int main () {
ifstream fi("arbint.in");
ofstream fo("arbint.out");
fi >> n >> op;
for (int i = 1; i <= n; i++)
fi >> x, pos = i, val = x, update(1, 1, n);
for (int i = 1; i <= op; i++) {
fi >> tip >> a >> b;
if (!tip) {
start = a, finish = b; maxim = -1;
query(1, 1, n);
fo << maxim << '\n';
}
else {
pos = a, val = b;
update(1, 1, n);
}
}
return 0;
}