Cod sursa(job #1522383)

Utilizator zacuscaAlex Iordache zacusca Data 11 noiembrie 2015 17:19:16
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <fstream>
#define DIM 100003
using namespace std;

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

int n, m, ARB[4*DIM];

void Update (int nod, int st, int dr, int poz, int val)
{
    if (st == dr) ARB[nod] = val;
    else
    {
        int mij = (st + dr) >> 1;
        if (poz <= mij)
            Update(nod << 1, st, mij, poz, val);
        else Update (1 + (nod << 1), mij + 1, dr, poz, val);
        ARB[nod] = max(ARB[1+ (nod << 1)], ARB[nod << 1]);
    }
}

void query (int nod, int st, int dr, int x, int y, int &sol)
{
    if (x <= st and dr <= y) sol = max (sol, ARB[nod]);
    else
    {
        int mij = (st + dr) >> 1;
        if (x <= mij) query(nod << 1, st, mij, x, y, sol);
        if (mij < y) query(1 + (nod << 1) , mij + 1, dr, x, y, sol);
    }
}

int main()
{
    in >> n >> m;

    for (int x, i = 1; i <= n; i++)
    {
        in >> x;
        Update(1, 1, n, i, x);
    }

    for (int t, x, y; m; --m)
    {
        in >> t >> x >> y;

        if (t) Update(1, 1, n, x, y);
        else {int sol = 0; query(1, 1, n, x, y, sol); out << sol << '\n';}
    }

    out.close();
    return 0;
}