Pagini recente » Cod sursa (job #2465930) | Cod sursa (job #2663652) | Cod sursa (job #2143899) | Cod sursa (job #1915288) | Cod sursa (job #2304547)
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,m,aint[400005],a[400005];
void constr()
{int i;
int N=2*n-1;
for (i=n;i<=N;i++)
aint[i]=a[i-n+1];
for (i=n-1;i>=1;i--)
aint[i]=max(aint[i*2],aint[i*2+1]);
}
void update(int p,int x)
{
p=p+n-1;
aint[p]=x;
p/=2;
while (p>0)
{
aint[p]=max(aint[p*2],aint[p*2+1]);
p/=2;
}
}
int query(int p,int x,int y,int st,int dr)
{
if (st==x&&dr==y)
return aint[p];
int mij=(st+dr)/2;
if (y<=mij)
return query(2*p,x,y,st,mij);
if (x>mij)
return query(2*p+1,x,y,mij+1,dr);
return max(query(2*p,x,mij,st,mij),query(2*p+1,mij+1,y,mij+1,dr));
}
void Resize()
{int k;
for (k=1;k<n;k*=2)
;
n=k;
}
int main()
{int i,x,tip,y;
in>>n>>m;
for (i=1;i<=n;i++)in>>a[i];
Resize();
constr();
for (i=1;i<=m;i++)
{
in>>tip>>x>>y;
if (tip==0)
{
out<<query(1,x,y,1,n)<<"\n";
}
else
{
update(x,y);
}
}
}