Pagini recente » Cod sursa (job #1554229) | Cod sursa (job #2927780) | Cod sursa (job #1189785) | Cod sursa (job #2963533) | Cod sursa (job #445286)
Cod sursa(job #445286)
#include<fstream.h>
ifstream f("arbint.in");
ofstream g("arbint.out");
int ai[280000],st[280000],dr[280000],max[280000],v[100005],n,a,b,k;
void update ()
{
if (st[k]==dr[k])
{
ai[k]=b;
return ;
}
if (a<=(st[k]+dr[k])/2)
{
k<<=1;
update();
k>>=1;
}
else
{
k<<=1;
++k;
update();
k>>=1;
}
ai[k]=ai[2*k];
if (ai[2*k]<=ai[2*k+1])
ai[k]=ai[2*k+1];
}
void querry ()
{
if (a<=st[k] && dr[k]<=b)
{
max[k]=ai[k];
return ;
}
max[2*k]=-1;
max[2*k+1]=-1;
if (a<=(st[k]+dr[k])/2)
{
k<<=1;
querry();
k>>=1;
}
if (b>(st[k]+dr[k])/2)
{
k<<=1;
k++;
querry();
k>>=1;
}
if (max[2*k]==-1)
max[k]=max[2*k+1];
else
if (max[2*k+1]==-1)
max[k]=max[2*k];
else
if (max[2*k]>max[2*k+1])
max[k]=max[2*k];
else
max[k]=max[2*k+1];
}
void init ()
{
if (st[k]==dr[k])
{
ai[k]=v[st[k]];
return ;
}
st[2*k]=st[k];
dr[2*k]=(st[k]+dr[k])/2;
st[2*k+1]=dr[2*k]+1;
dr[2*k+1]=dr[k];
k*=2;
init();
k++;
init();
k/=2;
ai[k]=ai[2*k];
if (ai[k]<ai[2*k+1])
ai[k]=ai[2*k+1];
}
int main()
{
int i,m,op;
f>>n>>m;
for (i=1;i<=n;i++)
f>>v[i];
st[1]=1;dr[1]=n;k=1;
init();
for (i=1;i<=m;i++)
{
f>>op>>a>>b;
if (op==0)
{
k=1;
querry();
g<<max[1]<<"\n";
}
else
{
k=1;
update();
}
}
f.close();
g.close();
return 0;
}