Cod sursa(job #1389357)

Utilizator cosmin.pascaruPascaru Cosmin cosmin.pascaru Data 16 martie 2015 10:43:10
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>

#define NMAX 100005
using namespace std;

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

int a, b;
int arb[NMAX << 2];

void update(int st, int dr, int nod);
int query(int st, int dr, int nod);

int main()
{
    int n, m;
    int c;
    fin >> n >> m;

    for (int i = 1; i <= n; ++i)
    {
        fin >> b; a = i;
        update(1, n, 1);
    }

    for (; m; --m)
    {
        fin >> c >> a >> b;
        if (c == 0) fout << query(1, n, 1) << '\n';
        else update(1, n, 1);
    }
    return 0;
}
void update(int st, int dr, int nod)
{
    if (st >= dr)
    {
        arb[nod] = b;
        return;
    }

    int mij = st + ((dr - st) >> 1);
    if (a <= mij) update(st, mij, nod << 1);
    else update(mij + 1, dr, (nod << 1) + 1);

    arb[nod] = max (arb[nod << 1], arb[(nod << 1) + 1]);
}
int query(int st, int dr, int nod)
{
    if (st >= dr) return arb[nod];

    int m1 = 0, m2 = 0, mij = st + ((dr - st) >> 1);
    if (a <= mij) m1 = query(st, mij, nod << 1);
    if (b > mij) m2 = query(mij + 1, dr, (nod << 1) + 1);

    return max(m1, m2);
}