Cod sursa(job #1525438)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 15 noiembrie 2015 01:10:32
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.32 kb
#include <fstream>
#include <vector>

const int NMAX = 100005;

using namespace std;

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

int N,M;
int ArbMax[4*NMAX];
int val,pos;
int x,y;
int maxim;

void Query(int nod, int left, int right)
{
    if (x <= left && y >= right)
    {
        maxim = max(maxim, ArbMax[nod]);
        return;
    }

    int mid = (left + right) / 2;

    if (y > mid)
        Query(2*nod+1,mid+1,right);
    if (x <= mid)
        Query(2*nod,left,mid);
}

void Update(int nod, int left, int right)
{
    if (left == right)
    {
        ArbMax[nod] = val;
        return;
    }

    int mid = (left + right) / 2;

    if (pos <= mid)
        Update(nod*2,left,mid);
    if (pos > mid)
        Update(nod*2+1,mid+1,right);

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

int main()
{
    f >> N >> M;

    for (int i = 1; i <= N; ++i)
    {
        f >> val;
        pos = i;
        Update(1,1,N);
    }

    for (int i = 1; i <= M; ++i)
    {
        int type;
        f >> type;

        if (type == 0)
        {
            maxim = 0;
            f >> x >> y;
            //continue;
            Query(1,1,N);
            g << maxim << '\n';
        }
        if (type == 1)
        {
            f >> pos >> val;
            Update(1,1,N);
        }
    }

    f.close();
    g.close();

    return 0;
}