Cod sursa(job #285767)

Utilizator silvia_the_bestSilvia Pripoae silvia_the_best Data 22 martie 2009 21:58:17
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <cstdio>
#define FIN "arbint.in"
#define FOUT "arbint.out"
#define N 100010

int p, v, maxim, a[4* N + 100], n, m;

int max(int a, int b)
{
    return (a > b) ? a : b;
}

void update(int x, int l, int r)
{
    int mid;

    if (l == r)
        a[x] = v;
    else
    {
        mid = (l + r) >> 1;

        if (p <= mid)
            update(2 * x, l, mid);
        else
            update(2 * x + 1, mid + 1, r);
        a[x] = max (a[2 * x], a[2 * x + 1]);
    }
}

void query(int x, int l, int r)
{
    int mid;
    if (p <= l && r <= v)
    {
        maxim = max(a[x], maxim);
        return;
    }

    mid = (l + r) >> 1;
    if (p <= mid)
        query(2 * x, l, mid);
    if (v > mid)
        query(2 * x + 1, mid + 1, r);
}

int main()
{
    int i, t;
    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    scanf("%d%d", &n, &m);

    for (p = 1; p <= n; ++p)
    {
        scanf("%d", &v);

        update(1, 1, n);
    }

    for (int i = 1; i <= m; ++i)
    {
        scanf("%d", &t);
        if (t)
        {
            scanf("%d%d", &p, &v);

            update(1, 1, n);
        }
        else
        {
            maxim = 0;
            scanf("%d%d", &p, &v);

            query(1, 1, n);

            printf("%d\n", maxim);
        }
    }

}