Pagini recente » Cod sursa (job #2647876) | Cod sursa (job #490353) | Cod sursa (job #2896887) | Cod sursa (job #558932) | Cod sursa (job #1058480)
#include<fstream>
#define maxnod 200009
using namespace std;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
int i,n,m,arb[maxnod];
int oper,a,b,x,poz,q;
inline int max(int a,int b){
if (a>b) return a;
else return b;
}
void creare_arb(int nod,int st,int dr){
if (st==dr) fi>>arb[nod];
else{
creare_arb(2*nod,st,(st+dr)/2);
creare_arb(2*nod+1,(st+dr)/2+1,dr);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
}
void query(int nod,int st,int dr){
if(a<=st && dr<=b){
if(arb[nod]>q) q=arb[nod];
}
else{
int mijl=(st+dr)/2;
if(a<=mijl) query(2*nod,st,mijl);
if(mijl+1<=b) query(2*nod+1,mijl+1,dr);
}
}
void update(int nod,int st,int dr){
if(st==dr) arb[nod]=x;
else{
int mijl=(st+dr)/2;
if(poz<=mijl) update(2*nod,st,mijl);
else update(2*nod+1,mijl+1,dr);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
}
int main(){
fi>>n>>m;
creare_arb(1,1,n);
for(i=1;i<=m;i++){
fi>>oper;
if(oper==0){
fi>>a>>b; q=0;
query(1,1,n);
fo<<q<<"\n";
}
else{
fi>>poz>>x;
update(1,1,n);
}
}
fi.close();
fo.close();
return 0;
}