Pagini recente » Cod sursa (job #1437855) | Cod sursa (job #2786907) | Cod sursa (job #2661867) | Cod sursa (job #2496977) | Cod sursa (job #2701035)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,p,st,dr,aint[1<<18],getMax(int,int,int);
int main()
{
f>>n>>m;
p=1;
while(p<n)p*=2;
for(int i=p,j=1;j<=n;i++,j++)
f>>aint[i];
for(int i=p-1;i>=1;i--)
aint[i]=max(aint[2*i],aint[2*i+1]);
for(;m;m--)
{
int tip;
f>>tip;
if(tip==0)
{
f>>st>>dr;
g<<getMax(1,1,p)<<'\n';
}
else
{
int nod,val;
f>>nod>>val;
nod=nod+p-1;
aint[nod]=val;
nod/=2;
while(nod>0)
{
aint[nod]=max(aint[2*nod],aint[2*nod+1]);
nod/=2;
}
}
}
return 0;
}
int getMax(int nod,int lo,int hi)
{
if(st<=lo&&hi<=dr)
return aint[nod];
if(st>hi||lo>dr)
return 0;
int mi=(lo+hi)/2;
return max(getMax(2*nod,lo,mi),getMax(2*nod+1,mi+1,hi));
}