Cod sursa(job #765338)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 7 iulie 2012 12:09:16
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include<cstdio>
#define N 100001
int n,m,i,a[N],y,z,h[18*N],j,k,t,x;

int A(int n,int s,int d,int y,int z)
{int m=(s+d)>>1,u=0,v=0;
if(y<=s&&d<=z)
     return h[n];
if(y<=m)
     u=A(n<<1,s,m,y,z);
if(z>m)
     v=A(2*n+1,m+1,d,y,z);
return u<v?v:u;}

void B(int n,int x,int s,int d,int y)
{int m=(s+d)>>1;
if(s==d)
     {h[n]=y;
     while(n>1)
           n>>=1,h[n]=h[2*n]<h[2*n+1]?h[2*n+1]:h[2*n];
     return;}
if(x<=m)
     B(n<<1,x,s,m,y);
else
     B(2*n+1,x,m+1,d,y);}

int main()
{freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
     scanf("%d",&a[i]),B(1,i,1,n,a[i]);
while(m--)
     {scanf("%d%d%d",&x,&y,&z);
     if(!x)
           printf("%d\n",A(1,1,n,y,z));
     else
           B(1,y,1,n,z);}
return 0;}