Cod sursa(job #147658)

Utilizator bogdanhm999Casu-Pop Bogdan bogdanhm999 Data 3 martie 2008 12:37:59
Problema Arbori de intervale Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <stdio.h>
#define Maxim(a,b) ((a>b)?a:b)

long H[250000],val_maxim;
long x,y,poz;

void Modify(long nod,long left,long right){
     if (left==right)
        H[nod]=y;
     else{
          long mid=(left+right)/2;
          if (poz<=mid)
               Modify(2*nod,left,mid);
          else Modify(2*nod+1,mid+1,right);   

          H[nod]=Maxim(H[2*nod], H[2*nod+1]);
     }
}

void Get_Max(long nod,long left,long right){
     if (x<=left && right<=y){
          if (val_maxim<H[nod]) val_maxim=H[nod];
     }
     else{
          long mid=(left+right)/2;
          if (x <= mid) Get_Max(2*nod,left,mid);
          if (mid < y) Get_Max(2*nod+1,mid+1,right);
     }
}

int main(){

    long N,M,i,op;

    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);

    scanf("%ld %ld", &N, &M);
    for (i=1;i<=N;i++){
        scanf("%ld",&y);
        poz=i;
        Modify(1,1,N);
    }

    for (;M;M--){
        scanf("%ld %ld %ld",&op,&x,&y);
        if (op==0){
           val_maxim= -10000;
           Get_Max(1,1,N);
           printf("%ld\n",val_maxim);
        }
        else{
            poz=x;
            Modify(1,1,N);
        }
    }
}