Cod sursa(job #1329633)

Utilizator frantiu.andreiFrantiu Andrei Mihai frantiu.andrei Data 29 ianuarie 2015 18:44:02
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#include <vector>
#include <algorithm>
#define NMax 131079

using namespace std;

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

int N,M,Arb[NMax],poz,X,nrmax=-1,a,b,O;

void Update(int st,int dr,int Nod)
{
    if(st==dr)
       Arb[Nod]=X;
    else
    {
        int mij=(st+dr)/2;
        if(poz<=mij)
            Update(st,mij,2*Nod);
        else
            Update(mij+1,dr,2*Nod+1);
        Arb[Nod]=max(Arb[2*Nod],Arb[2*Nod+1]);
    }

}

void Query(int st,int dr,int Nod)
{
    if(a<=st&&dr<=b)
    {
        nrmax=max(nrmax,Arb[Nod]);
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij)
        Query(st,mij,2*Nod);
    if(b>mij)
        Query(mij+1,dr,2*Nod+1);

}


void Read()
{
    f>>N>>M;
    for(int i=1;i<=N;i++)
    {
        f>>X;
        poz=i;
        Update(1,N,1);
    }
    for(int i=1;i<=M;i++)
    {
        f>>O>>a>>b;
        if(O==0)
        {
            Query(1,N,1);
            g<<nrmax<<'\n';
            nrmax=-1;
        }
        else
        {
            poz=a;
            X=b;
            Update(1,N,1);
        }
    }
}

int main()
{
    Read();
    return 0;
}