Mai intai trebuie sa te autentifici.

Cod sursa(job #1506545)

Utilizator DoraBenzoVelicu Teodora DoraBenzo Data 20 octombrie 2015 19:40:20
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#define mx 100001

using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int n, m, a[3*mx], i, x, y, Mx;
bool cond;

int maxim(int c, int b)
{
    if(c > b)
        return c;
    return b;
}

void update(int st, int dr, int p)
{
    if(st == dr)
    {
        a[p] = y;
        return;
    }
    int mij=(st+dr)/2;
    if(mij >= x)
        update(st, mij, p*2);
    else
        update(mij+1, dr, p*2+1);

    a[p] = maxim(a[p*2], a[p*2+1]);

}

void query(int st, int dr, int p)
{
    if(x <= st && y >= dr)
    {
        Mx = maxim(Mx, a[p]);
        return;
    }
    int mij = (st + dr) / 2;
    if(x <= mij)
        query(st, mij, 2*p);
    if(y > mij)
        query(mij+1, dr, 2*p+1);
}

void rezolvare()
{

    fin >> n >> m;
    for(x=1; x<=n; x++)
    {
        fin >> y;
        update(1, n, 1);
    }

    for(i=1; i<=m; i++)
    {
        fin >> cond >> x >> y;
        if(cond == 0)
        {
            Mx = -1;
            query(1, n, 1);
            fout<<Mx<<"\n";
        }
        else
            update(1, n, 1);
    }

}

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