Pagini recente » Cod sursa (job #431013) | Cod sursa (job #3145180) | Cod sursa (job #2406701) | Cod sursa (job #3267910) | Cod sursa (job #555423)
Cod sursa(job #555423)
#include<stdio.h>
long int n,m,baza,i,a[262150],b[262150],s[262150],last,fs,fd,x,y,z,poz,tata,
maxold,maxnew;
long int query(long int pa);
int main()
{
FILE *f,*g;
f=fopen("arbint.in","r");
g=fopen("arbint.out","w");
fscanf(f,"%ld%ld",&n,&m);
baza=1;
while(baza<n)baza<<=1;
baza--;
i=1;
for(i=1;i<=n;i++)
{ a[baza+i]=i;
b[baza+i]=i;
fscanf(f,"%ld",&s[baza+i]);
}
for(i=n+1;i<=baza+1;i++)
{ a[baza+i]=i;
b[baza+i]=i;
}
for(i=baza;i>=1;i--)
{ fs=(i<<1);
fd=fs+1;
a[i]=a[fs];
b[i]=b[fd];
s[i]=(s[fs]>s[fd])?s[fs]:s[fd];
}
for(i=1;i<=m;i++)
{ fscanf(f,"%ld%ld%ld",&x,&y,&z);
if(x==0)
fprintf(g,"%ld\n",query(1));
else
{ poz=baza+y;
s[poz]=z;
tata=poz>>1;
while(tata)
{ fs=tata<<1;
fd=fs+1;
maxold=s[tata];
maxnew=(s[fs]>s[fd])?s[fs]:s[fd];
if(maxnew==maxold)break;
s[tata]=maxnew;
tata>>=1;
}
}
}
return 0;
}
long int query(long int pa)
{ long int max1,max2;
if(y>b[pa])return 0;
if(z<a[pa])return 0;
if(y<=a[pa]&&b[pa]<=z) return s[pa];
max1=query(pa<<1);
max2=query((pa<<1)|1);
max1=(max1>max2)?max1:max2;
return max1;
}