Pagini recente » Cod sursa (job #718458) | Cod sursa (job #91222) | Cod sursa (job #821976) | Cod sursa (job #2127061) | Cod sursa (job #1012088)
#include<fstream>
#define max(a,b) (a>b?a:b)
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
const int Nmax = 100005;
int A[20*Nmax];
int N,M;
int sto,dro,upd,maxim;
void update(int st,int dr,int i){
if(st==dr) A[i]=upd;
else{
int mij=(st+dr)/2;
if(sto<=mij) update(st,mij,2*i);
if(mij+1<=dro) update(mij+1,dr,2*i+1);
A[i]=max(A[2*i],A[2*i+1]);
}
}
void Update(int a,int b){
sto=a;
dro=a;
upd=b;
update(1,N,1);
}
void query(int st,int dr,int i){
if(sto<=st && dr<=dro){
if(maxim<A[i]) maxim=A[i];
}
else{
int mij=(st+dr)/2;
if(sto<=mij) query(st,mij,2*i);
if(mij+1<=dro) query(mij+1,dr,2*i+1);
}
}
int Query(int a,int b){
sto=a;
dro=b;
maxim=0;
query(1,N,1);
return maxim;
}
int main(){
in>>N>>M;
for(int i=1;i<=N;i++){
int val;
in>>val;
Update(i,val);
}
for(int i=1;i<=M;i++){
int op,a,b;
in>>op>>a>>b;
if(op==0) out<<Query(a,b)<<'\n';
if(op==1) Update(a,b);
}
return 0;
}