Cod sursa(job #606095)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 3 august 2011 13:10:14
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include<fstream.h>
#define N 100001
long n,m,i,a[N],y,z,h[18*N],j,k,t,x;
long max(long x,long y)
{if(x<y)
     return y;
return x;}
long ma(long h[18*N],long n,long s,long d,long y,long z)
{long m=(s+d)/2,u=0,v=0;
if(y<=s&&d<=z)
     return h[n];
if(y<=m)
     u=ma(h,2*n,s,m,y,z);
if(z>m)
     v=ma(h,2*n+1,m+1,d,y,z);
return max(u,v);}
void add(long h[18*N],long n,long x,long s,long d,long y)
{long m=(s+d)/2;
if(s==d)
     {h[n]=y;
     while(n>1)
           n/=2,h[n]=max(h[2*n],h[2*n+1]);
     return;}
if(x<=m)
     add(h,2*n,x,s,m,y);
else
     add(h,2*n+1,x,m+1,d,y);}
int main()
{ifstream f("arbint.in");
freopen("arbint.out","w",stdout);
f>>n>>m;
for(i=1;i<=n;i++)
     f>>a[i],add(h,1,i,1,n,a[i]);
for(i=1;i<=m;i++)
     {f>>x>>y>>z;
     if(!x)
           printf("%ld\n",ma(h,1,1,n,y,z));
     else
           add(h,1,y,1,n,z);}
return 0;}