Pagini recente » Cod sursa (job #1205655) | Cod sursa (job #904852) | Cod sursa (job #3210915) | Cod sursa (job #1056454) | Cod sursa (job #2851061)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int arbint[400005];
int n,pozto,x,m;
int op,a,b;
void update(int pos, int st, int dr) {
if (pozto < st || pozto > dr) {
return;
}
if (st == dr) {
arbint[pos] = x;
return;
}
int mij = (st+dr)/2;
update(2*pos,st,mij);
update(2*pos+1,mij+1,dr);
arbint[pos] = max(arbint[2*pos],arbint[2*pos+1]);
}
int get_max(int pos, int st, int dr) {
if (st>b || dr<a) {
return 0;
}
if (st>=a && dr<=b) {
return arbint[pos];
}
int mij = (st+dr)/2;
return max(get_max(2*pos,st,mij),get_max(2*pos+1,mij+1,dr));
}
int main()
{ f >> n >> m;
for (int i=1;i<=n;i++) {
f >> x;
pozto = i;
update(1,1,n);
}
for (int i=1;i<=m;i++) {
f >> op >> a >> b;
if (op==1) {
pozto = a;
x = b;
update(1,1,n);
}
else {
g << get_max(1,1,n) << '\n';
}
}
return 0;
}