Cod sursa(job #1194142)

Utilizator rangerChihai Mihai ranger Data 2 iunie 2014 22:07:36
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
const int nmax=100000;
int adi[4*nmax],n,m,op,a,b,x;

void Actualizare(int nod, int st, int dr, int care, int cat)
{
    if (st==dr) adi[nod]=cat; else
    {
        int mij=(st+dr)/2;
        if (care<=mij)
            Actualizare(2*nod,st,mij,care,cat);
        else
            Actualizare(2*nod+1,mij+1,dr,care,cat);
      adi[nod]=max(adi[2*nod],adi[2*nod+1]);
    }
}

int scoate(int nod,int st, int dr,int a, int b)
{
    if (st==a && dr==b)
        return adi[nod];
    int mij=(st+dr)/2;
    if (b<=mij)
        return scoate(2*nod,st,mij,a,b);
    if (a>mij)
        return scoate(2*nod+1,mij+1,dr,a,b);
    return max(scoate(2*nod,st,mij,a,mij),scoate(2*nod+1,mij+1,dr,mij+1,b));
}


int main()
{
    cin>>n>>m;
    for (int i=1;i<=n;i++)
        cin>>x,
        Actualizare(1,1,n,i,x);


    while (m--)
    {

         cin>>op>>a>>b;
         if (op==0)
             cout<<scoate(1,1,n,a,b)<<"\n";
              else
                    Actualizare(1,1,n,a,b);
    }

}