Pagini recente » Cod sursa (job #1346526) | Cod sursa (job #2195882) | Cod sursa (job #617392) | Cod sursa (job #1398385) | Cod sursa (job #2812987)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, m, arbint[400000], cit[100002], pos, start, fin, act, ans;
void update(int nod, int st, int dr) {
if (st == dr) {
arbint[nod] = act;
return;
}
int div = (st + dr) / 2;
if (pos <= div) {
update(nod * 2, st, div);
}
else {
update(nod * 2 + 1, div + 1, dr);
}
arbint[nod] = max(arbint[nod * 2], arbint[nod * 2 + 1]);
}
void query(int nod, int st, int dr){
if (st >= start && dr <= fin) {
if (ans < arbint[nod]) {
ans = arbint[nod];
return;
}
}
else {
int div = (st + dr) / 2;
if (div >= start) {
query(nod * 2, st, div);
}
if (div + 1 <= fin) {
query(nod * 2 + 1, div + 1, dr);
}
}
}
int main() {
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> cit[i];
pos = i;
act = cit[i];
update(1, 1, n);
}
for (int i = 1; i <= m; i++) {
int c, x, y;
cin >> c >> x >> y;
if (c == 1) {
pos = x;
act = y;
update(1, 1, n);
}
else {
ans = -1;
start = x;
fin = y;
query(1, 1, n);
cout << ans << '\n';
}
}
}