Cod sursa(job #1199748)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 20 iunie 2014 15:22:22
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <cstdio>

using namespace std;

int arb[1<<19];
int n,m,i,poz,a,b,tip,x;

inline void act(int nod,int st,int dr)
 {
     int m;

     if (st>=dr)
      arb[nod]=x;
     else
     {
         m=(st+dr)/2;
     if (i<=m) act(2*nod,st,m);
      else act(2*nod+1,m+1,dr);

     if (arb[2*nod]<arb[2*nod+1]) arb[nod]=arb[2*nod+1];
      else arb[nod]=arb[2*nod];
     }
 }

inline int interogare(int nod,int st,int dr)
 {
     int val1=0,val2=0,m;
     if (a<=st && dr<=b) return arb[nod];

     m=(st+dr)/2;
     if (a<=m) val1=interogare(2*nod,st,m);
     if (b>m) val2=interogare((2*nod+1),m+1,dr);

     if (val1>val2) return val1;
     return val2;

 }

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", &x);
         poz=i;
         act(1,1,n);
     }

     for (int j=1;j<=n;++j)
      {
          scanf("%d %d %d", &tip, &a, &b);
          if (tip==1)
           {
               i=a;
               x=b;
               act(1,1,n);
           }
           else

                printf("%d\n", interogare(1,1,n));
      }

    return 0;
}