Cod sursa(job #1648759)

Utilizator Harsan_SabinHarsan Sabin Harsan_Sabin Data 11 martie 2016 11:32:57
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;

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

int n,m,x,op,a,b;

int Arbi[4*100000];

void Actualizare(int nod , int st , int dr , int poz , int val)
{
    int mj=0;

    if(st==dr)
    {
        Arbi[nod]=val;
        return;
    }

    mj=(st+dr)/2;

    if(poz<=mj)
        Actualizare(2*nod,st,mj,poz,val);
    else
        Actualizare(2*nod+1,mj+1,dr,poz,val);

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

void Interogare(int nod , int st , int dr , int si , int fi, int &maxi)
{
    int mj=0;

    if(si<=st && dr<=fi)
    {
        if(maxi<Arbi[nod])
            maxi=Arbi[nod];
        return;
    }

    mj=(st+dr)/2;

    if(si<=mj)
        Interogare(2*nod,st,mj,si,fi,maxi);
    if(mj<fi)
        Interogare(2*nod+1,mj+1,dr,si,fi,maxi);
}

int main()
{
    cin>>n>>m;

    for(int i=1;i<=n;++i)
    {
        cin>>x;

        Actualizare(1,1,n,i,x);
    }

    for(int i=1;i<=m;++i)
    {
        cin>>op>>a>>b;

        if(op==0)
        {
            int maxi=-1;

            Interogare(1,1,n,a,b,maxi);

            cout<<maxi<<'\n';
        }
        else
            Actualizare(1,1,n,a,b);
    }
    return 0;
}