Pagini recente » Cod sursa (job #402847) | Cod sursa (job #2051692) | Cod sursa (job #307053) | Cod sursa (job #1815470) | Cod sursa (job #1740931)
#include<fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
int n,v,arb[200002],m,i,poz,val,a,b,maxs=-1;
void creare(int nod,int st,int dr){
int mij;
if (st==dr){
arb[nod]=val;
return;
}
mij=(st+dr)/2;
if (poz<=mij) creare(2*nod,st,mij);
else
creare(2*nod+1,mij+1,dr);
if (arb[2*nod]>arb[2*nod+1]) arb[nod]=arb[2*nod];
else
arb[nod]=arb[2*nod+1];
}
void maxim(int nod,int st,int dr){
int mij;
if (a<=st && dr<=b){
if (maxs<arb[nod]) maxs=arb[nod];
return;
}
mij=(st+dr)/2;
if (a<=mij) maxim(2*nod,st,mij);
if (mij<b) maxim(2*nod+1,mij+1,dr);
}
int main(){
fin>>n>>m;
for (i=1;i<=n;i++){
fin>>v;
poz=i;val=v;
creare(1,1,n);
}
for (i=1;i<=m;i++){
fin>>v>>a>>b;
if (v==1){
poz=a;val=b;
creare(1,1,n);
}
else{
maxs=-1;
maxim(1,1,n);
fout<<maxs<<'\n';
}
}
return 0;
}