Pagini recente » Cod sursa (job #3339647) | Istoria paginii utilizator/andreitifui | Cod sursa (job #1656772) | Cod sursa (job #2216706) | Cod sursa (job #2204141)
#include <stdio.h>
unsigned n,m,v[400005];
int main()
{
unsigned i,j,k,maxst,maxdr,o,a,b,p2;
FILE *f,*g;
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%d%d",&n,&m);
p2=1;
while(p2<n)
p2*=2;
p2--;
for (i=1;i<=n;i++)
fscanf(f,"%d",&v[p2+i]);
for(i=(n+p2)/2;i>=1;i--)
if(v[2*i]<v[2*i+1])
v[i]=v[2*i+1];
else
v[i]=v[2*i];
for(i=1;i<=m;i++)
{
fscanf(f,"%d%d%d",&o,&a,&b);
if(o==1)
{
a+=p2;v[a]=b;
while(a>2)
{
a=a/2;
if(v[2*a]>v[2*a+1])
v[a]=v[2*a];
else
v[a]=v[2*a+1];
}
}
if(o==0)
{
a+=p2;b+=p2;
maxst=v[a];maxdr=v[b];
while(a/2!=b/2)
{
if(a<b)
{
if(b%2==1)
if(v[b-1]>maxdr)
maxdr=v[b-1];
b=b/2;
}
else
{
if(a%2==0)
if(v[a+1]>maxst)
maxst=v[a+1];
a=a/2;
}
}
fprintf(g,"%d\n",maxst>maxdr?maxst:maxdr);
}
}
}