Mai intai trebuie sa te autentifici.

Cod sursa(job #626328)

Utilizator vladtarniceruVlad Tarniceru vladtarniceru Data 26 octombrie 2011 20:53:12
Problema Arbori de intervale Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <algorithm>
using namespace std;

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

int n, aint[300300], cit, m;

void update(int st, int dr, int nod, int val, int poz)
{
    if (st >= dr)
    {
        aint[nod] = val;
        return ;
    }

    int m = (st + dr) / 2;
    if (poz <= m)
        update(st, m, nod * 2, val, poz);
    else
        update(m + 1, dr, nod * 2 + 1, val, poz);

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

int query(int st, int dr, int i, int j, int nod)
{
    if (i <= st && dr <= j) return aint[nod];

    int m = (st + dr) / 2, sol = 0;
    if (i <= m) sol = max(sol, query(st, m, i, j, nod * 2));
    else
    if (m < j) sol = max(sol, query(m + 1, dr, i, j, nod * 2 + 1));

    return sol;
}
int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        f >> cit;
        update(1, n, 1, cit, i);
    }

    for (int i = 1; i <= m; ++i)
    {
        int Q, x, y;
        f >> Q >> x >> y;
        if (!Q)
        {
            g << query(1, n, x, y, 1) << '\n';
        }
        else
            update(1, n, 1, y, x);
    }

    return 0;
}