Cod sursa(job #1893674)

Utilizator gabrielamoldovanMoldovan Gabriela gabrielamoldovan Data 25 februarie 2017 21:22:19
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>

#define nmax 100005

using namespace std;

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

int arbint[4*nmax];
int n, m,val, pos, start, finish, maxim;

void Add(int nod, int st, int dr)
{
    if(st==dr)
    {
        arbint[nod]=val;
        return ;
    }
    int div=(st+dr)/2;
    if(pos<=div) Add(2*nod, st, div);
    else Add (2*nod+1, div+1, dr);
    arbint[nod]=max(arbint[2*nod],arbint[2*nod+1]);
}

void Query(int nod, int st, int dr)
{
    if(start<=st && dr<=finish)
    {
        maxim=max(maxim, arbint[nod]);
        return ;
    }
    int div=(st+dr)/2;
    if(start<=div) Query(2*nod,st, div);
    if(div<finish) Query(2*nod+1, div+1, dr);
}

int main()
{
    f>>n>>m;
    int p;
    for(int i=1; i<=n; ++i)
    {
        f>>val;
        pos=i;
        Add(1, 1, n);
    }
    for(int i=1; i<=m; ++i)
    {
        f>>p;
        if(p==0)
        {
            maxim=-1;
            f>>start>>finish;
            Query(1, 1, n);
            g<<maxim<<"\n";
        }
        else
        {
            f>>pos>>val;
            Add(1, 1, n);
        }
    }
    return 0;
}