Pagini recente » Cod sursa (job #377977) | Cod sursa (job #350680) | Cod sursa (job #3141772) | Cod sursa (job #1354153) | Cod sursa (job #659092)
Cod sursa(job #659092)
#include<iostream>
#include<fstream>
using namespace std;
int n,m,arb[4*100001+66],val,poz,maxim,a,b,op;
ifstream f("arbint.in");
ofstream g("arbint.out");
int max(int x,int y){
if(x>y)return x;
return y;
}
void update(int nod,int ls,int ld){
if(ls==ld){
arb[nod]=val;
return;
}
int mij=(ls+ld)/2;
if(poz<=mij)
update(2*nod,ls,mij);
else update(2*nod+1,mij+1,ld);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
void query(int nod,int ls,int ld){
if(a<=ls&&ld<=b){
if(maxim<arb[nod])maxim=arb[nod];
return;
}
int mij=(ls+ld)/2;
if(a<=mij)query(nod*2,ls,mij);
if(mij<b)query(nod*2+1,mij+1,ld);
}
int main(){
f>>n>>m;
int x;
for(int i=1;i<=n;i++){
f>>x;
poz=i;
val=x;
update(1,1,n);
}
for(int i=1;i<=m;i++){
f>>op>>a>>b;
if(op==0){
maxim=-1;
query(1,1,n);
g<<maxim<<"\n";
}
else{
poz=a;
val=b;
update(1,1,n);
}
}
return 0;
}