Cod sursa(job #1219556)

Utilizator vasica38Vasile Catana vasica38 Data 14 august 2014 15:57:27
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.34 kb

#include<fstream>
#include<algorithm>
using namespace std;
int mijl,n,m,i,x,y,sol,a[400009],k;
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 ((st>=x) && (dr<=y)) sol=max(sol,a[nod]);
        else
            {
            int 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++) {
             cin>>y;
             x=i;
             update(1,n,1);
             }
    while (m--) {
          cin>> k>>x>>y;
          if (k==0) {
                       sol=0;
                       query(1,n,1);
                       cout<<sol<<"\n";
                       }
                       else
                       update(1,n,1);
                       }
    return 0 ;
    cin.close();
    cout.close();

}