Cod sursa(job #1200512)

Utilizator vasica38Vasile Catana vasica38 Data 22 iunie 2014 17:41:34
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.45 kb
#include<fstream>
using namespace std;
int max(int x, int y)
     {
             if (x>y) return x;
             else return y;
}
int mijl,n,m,i,x,y,sol,a[400009];
void update(int st, int dr , int nod)
     {
                if (st==dr) a[nod]=y;
                    else
                    {
                        mijl = (st+dr) / 2;
                        if (x<=mijl) update(st , mijl , nod*2);
                           else
                           update(mijl+1,dr,nod*2+1);
                        a[nod]=max(a[2*nod],a[2*nod+1]);
                        }
}

void query (int st , int dr , int nod)
{
     if ((x<=dr)&&(y>=st )) sol=max(sol,a[nod]);
        else
            {
            mijl=(st+dr) /2;
            if (x<=mijl) query (st,mijl,2*nod);
            if (y>mijl) query  (mijl+1, dr , nod *2+1);
            }
}
int main()
{
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    cin>>n>>m;
    for (i=1 ; i<=n ; i=i+1) {
             cin>>y;
             x=i;
             update(1,n,1);
             }
    int k;
      while (m--) {
          cin>> k>>x>>y;
          if (k==0) {
                       sol=0;
                       query(1,n,1);
                       cout<<sol;
                       }
                       else
                       update(1,n,1);
                       }
    return 0 ;
    cin.close();
    cout.close();
    
}