Pagini recente » Cod sursa (job #2785982) | Cod sursa (job #1445178) | Cod sursa (job #1995096) | Cod sursa (job #2799634) | Cod sursa (job #1861771)
#include <fstream>
#define NMAX 100010
using namespace std;
int MaxArb[4*NMAX],n,m,start,finish,maxim,ind,val;
ifstream f("arbint.in");
ofstream g("arbint.out");
void read(int nod,int right,int left){
if(right==left)
f>>MaxArb[nod];
else{
int mij=(left+right)/2;
read(2*nod, right, mij);
read(2*nod+1, mij+1,left);
MaxArb[nod]=max(MaxArb[2*nod],MaxArb[2*nod+1]);
}
}
void Update(int nod,int left,int right){
if(left==right)
MaxArb[nod]=val;
else{
int mij=(left+right)/2;
if(ind<=mij)
Update(2*nod,left,mij);
if(ind>mij)
Update(2*nod+1,mij+1,right);
MaxArb[nod]=max(MaxArb[2*nod],MaxArb[2*nod+1]);
}
}
void Query(int nod,int left,int right){
if(start<=left&&right<=finish)
maxim=max(maxim,MaxArb[nod]);
else{
int mij=(left+right)/2;
if(start<=mij)
Query(2*nod,left,mij);
if(mij<finish)
Query(2*nod+1,mij+1,right);
}
}
int main()
{
f>>n>>m;
read(1,1,n);
for(int ii=1;ii<=m;ii++){
int op,x,y;
f>>op>>x>>y;
if(op==0){
maxim=0;
start=x;
finish=y;
Query(1,1,n);
g<<maxim<<'\n';
}else{
ind=x;
val=y;
Update(1,1,n);
}
}
return 0;
}