Cod sursa(job #1734166)

Utilizator Lungu007Lungu Ionut Lungu007 Data 26 iulie 2016 17:58:14
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.3 kb
#include <iostream>
#include <fstream>
#define NMAX 100001
using namespace std;

int a[2*NMAX+1],p,A,B,n,x,m,v[NMAX],nr,val,Max;

ifstream in("arbint.in");
ofstream out("arbint.out");

void update(int nod,int st,int dr)
{
    if(st==dr)
    {
        a[nod] = val;
    }
    else
    {
       int mij = (st+dr)/2;
        if(nr<=mij)
        {
            update(2*nod,st,mij);
        }
        else
        {
            update(2*nod+1,mij+1,dr);
        }

        a[nod] = max(a[2*nod],a[2*nod+1]);
    }
}

void querry(int nod,int st, int dr)
{

    if(A<=st && dr <= B)
    {

        Max = max(Max,a[nod]);
    }
    else
    {
        int mij = (st+dr)/2;
        if(A<=mij) querry(2*nod,st,mij);
        if(mij<B)  querry(2*nod+1,mij+1,dr);
    }
}


int main()
{
    in >> n >> m;
    for(int i=1;i<=n;i++)
    {
        in >> val;
        nr = i;
        update(1,1,n);
    }

    for(int i=1;i<=m;i++)
    {
        in >> p >> A >> B;
        if(p==1)
        {
            nr = A;
            val = B;
            update(1,1,n);
        }else
        {
            Max = 0;
            querry(1,1,n);
            out << Max << "\n";
        }
    }

 //   for(int i=1;i<=2*n-1;i++)
     //   cout << i << " " <<a[i] << endl;
    return 0;
}