Pagini recente » Cod sursa (job #1934237) | Cod sursa (job #3152553) | Cod sursa (job #2620069) | Cod sursa (job #1335834) | Cod sursa (job #1184400)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long n,i,j,t,x,y,mx,m,nr,v[600005];
void up(long nd)
{
if (v[nd]>v[nd/2] && nd!=1)
{
v[nd/2]=v[nd];
up(nd/2);
}
}
void maxim(long nd,long st,long dr,long x,long y)
{
long mid;
mid=(st+dr)/2;
if(x<=st && y>=dr)
{
if (v[nd]>mx)
mx=v[nd];
}
else
{
if (x<=mid)
maxim(nd*2,st,mid,x,y);
if (y>=mid+1)
maxim(nd*2+1,mid+1,dr,x,y);
}
}
void up2(long nd)
{
if (nd!=1)
{
if (nd%2==1)
{
if (v[nd]>=v[nd-1])
v[nd/2]=v[nd];
else
v[nd/2]=v[nd-1];
up2(nd/2);
}
else
{
if (v[nd]>=v[nd+1])
v[nd/2]=v[nd];
else
v[nd/2]=v[nd+1];
up2(nd/2);
}
}
}
int main()
{
f>>n>>m;
nr=1;
while (nr<n)
nr*=2;
for (i=1;i<=n;i++)
{
f>>x;
v[nr+i-1]=x;
up(nr+i-1);
}
for (i=1;i<=m;i++)
{
f>>t>>x>>y;
if (t==1)
{
v[nr+x-1]=y;
up2(nr+x-1);
}
else
{
mx=0;
maxim(1,1,nr,x,y);
g<<mx<<'\n';
}
}
f.close();
g.close();
return 0;
}