Pagini recente » Cod sursa (job #2843023) | Cod sursa (job #1423455) | Cod sursa (job #44158) | Cod sursa (job #3240741) | Cod sursa (job #2400205)
#include<fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
#define maxn 100050
int arb[4*maxn],N,M,val,poz,start,stop,maxim,op;
inline int Maxim(int a, int b) {
if ( a > b ) return a;
return b;
}
void update(int nod, int st, int dr){
if(dr==st){
arb[nod]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij)
update(nod*2,st,mij);
else update(nod*2+1,mij+1,dr);
arb[nod]=Maxim(arb[2*nod],arb[2*nod+1]);
}
void query(int nod, int st, int dr){
if(start<=st && dr<=stop){
if(maxim<arb[nod])
maxim=arb[nod];
return;
}
int mij=(dr+st)/2;
if(start<=mij) query(2*nod,st,mij);
else query(2*nod+1,mij+1,dr);
}
int main(){
cin>>N>>M;
for(int i=1; i<=N; i++){
poz=i;
cin>>val;
update(1,1,N);
}
for(int i=1; i<=M; i++){
cin>>op;
if(op==1){
cin>>poz>>val;
update(1,1,N);
}else{
cin>>start>>stop;
maxim=-1;
query(1,1,N);
cout<<maxim<<'\n';
}
}
}