Pagini recente » Cod sursa (job #598618) | Cod sursa (job #1362315) | Cod sursa (job #2055132) | Cod sursa (job #1695672) | Cod sursa (job #2571154)
#include<iostream>
#include<fstream>
#define N 500000
using namespace std;
ifstream f("arbint.in");
ofstream o("arbint.out");
int poz,val,arb[N],n,m,a,b,vmax;
void update(int nod,int st,int dr){
if(st==dr){
arb[nod]=val;
return;
}
int mij=(st+dr)/2;
if(poz<=mij) update(nod*2,st,mij);
else update(nod*2+1,mij+1,dr);
arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}
void query(int nod,int st,int dr){
if(a<=st&&dr<=b){
vmax=max(vmax,arb[nod]);
return;
}
int mij=(st+dr)/2;
if(a<=mij) query(nod*2,st,mij);
if(mij<b) query(nod*2+1,mij+1,dr);
}
int main(){
f>>n>>m; int i,x;
for(i=1;i<=n;i++){
f>>val;
poz=i;
update(1,1,n);
}
for(i=1;i<=m;i++){
f>>x>>a>>b;
if(x==0){
vmax=-1;
query(1,1,n);
o<<vmax<<'\n';
}
else{
poz=a; val=b;
update(1,1,n);
}
}
o.close();
f.close();
}