Pagini recente » Cod sursa (job #2206510) | Cod sursa (job #719659) | Cod sursa (job #2204223) | Cod sursa (job #530414) | Cod sursa (job #666946)
Cod sursa(job #666946)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int sir[400001] , lef , righ , node , val, maxim;
void update(int nod , int l , int r){
if(l==r){sir[nod]=val;return;}
int half=(l+r)/2;
if(node<=half)update(2*nod,l,half);
if(node>half)update(2*nod+1,half+1,r);
sir[nod]=max(sir[2*nod+1],sir[2*nod]);
}
void maxinterval(int nod , int l , int r){
if(l>=lef&&r<=righ){
if(sir[nod]>maxim)maxim=sir[nod];
return;
}
int half=(l+r)/2;
if(half>=lef)maxinterval(2*nod,l,half);
if(half+1<=righ)maxinterval(2*nod+1,half+1,r);
}
int main(){
int n,m;
fi>>n>>m;
for(int i=0;i<n;i++){
fi>>val;
node=i+1;
update(1,1,n);
}
for(int i=0;i<m;i++){
int q,a,b;
fi>>q>>a>>b;
switch(q){
case 0:
maxim=-1;
lef=a;
righ=b;
maxinterval(1,1,n);
fo<<maxim<<'\n';
break;
case 1:
val=b;
node=a;
update(1,1,n);
}
}
return 0;
}