Pagini recente » Monitorul de evaluare | Profil AndreeaVina | Arhiva Infoarena Monthly | Statistici felcher andreea (Felcher) | Cod sursa (job #2018450)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int NMAX = 100000;
int n, m, val, maxx;
int arbint[4 * (1 + NMAX)];
void update(int node, int le, int ri, int pos) {
if(le == ri) {
arbint[node] = val;
return;
} else {
int mid = (le + ri) / 2;
if(pos <= mid)
update(2 * node, le, mid, pos);
else
update(2 * node + 1, mid + 1, ri, pos);
if(arbint[2 * node] < arbint[2 * node + 1])
arbint[node] = arbint[2 * node + 1];
else
arbint[node] = arbint[2 * node];
}
}
void query(int node, int le, int ri, int a, int b) {
if(a <= le && b >= ri) {
if(maxx < arbint[node])
maxx = arbint[node];
return;
} else {
int mid = (le + ri) / 2;
if(a <= mid)
query(2 * node, le, mid, a, b);
if(b > mid)
query(2 * node + 1, mid + 1, ri, a, b);
}
}
int main()
{
in >> n >> m;
for(int i = 1; i <= n; i++) {
in >> val;
update(1, 1, n, i);
}
for(int i = 1; i <= m; i++) {
int p, x, y;
in >> p >> x >> y;
if(p == 1) {
val = y;
update(1, 1, n, x);
} else {
maxx = -1;
query(1, 1, n, x, y);
out << maxx << '\n';
}
}
in.close();
out.close();
return 0;
}