Pagini recente » Cod sursa (job #2310659) | Cod sursa (job #2252834) | Cod sursa (job #2238058) | Cod sursa (job #391875) | Cod sursa (job #2998711)
#include <bits/stdc++.h>
using namespace std;
#define maxN 100000
ifstream in ("arbint.in");
ofstream out("arbint.out");
int n,m;
int maxime[4*maxN+100];
int start,finish,val,pos,maxi;
void update(int nod,int st,int dr){
if(st==dr){
maxime[nod]=val;
return;
}
int mij=(st+dr)/2;
if(pos<=mij){
update(2*nod,st,mij);
}
else{
update(2*nod+1,mij+1,dr);
}
maxime[nod]=max(maxime[2*nod],maxime[2*nod+1]);
}
void q(int nod,int st,int dr){
if(start<=st&& dr<=finish){
if(maxi<maxime[nod]){
maxi=maxime[nod];
}
return;
}
int mij=(st+dr)/2;
if(start<=mij){
q(2*nod,st,mij);
}
if(mij<finish){
q(2*nod+1,mij+1,dr);
}
}
int main(){
int x,a,b;
in>>n>>m;
for(int i=1;i<=n;i++){
in>>x;
pos=i;
val=x;
update(1,1,n);
}
for(int i=1;i<=m;i++){
in>>x>>a>>b;
if(x==0){
maxi=-1;
start=a;
finish=b;
q(1,1,n);
out<<maxi<<'\n';
}
else{
pos=a;
val=b;
update(1,1,n);
}
}
}