Cod sursa(job #1142242)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 13 martie 2014 17:16:20
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include<cstdio>
#define ARBMAX 300010

using namespace std;

int n, m, x, y, arb[ARBMAX];

inline int maxim(int A, int B)
{
    if (A>B) return A;
    return B;
}

void Update(int st, int dr, int nod)
{
    int mij=(st+dr)>>1;

    if (st==dr) arb[nod]=y;
    else
    {
        if (x<=mij) Update(st, mij, nod<<1);
        else Update(mij+1, dr, (nod<<1)+1);
        arb[nod]=maxim(arb[nod<<1], arb[(nod<<1)+1]);
    }
}

void Citeste()
{
    int i;

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

    for (i=1; i<=n; ++i)
    {
        scanf("%d", &y); x=i;
        Update(1, n, 1);
    }
}

int query(int st, int dr, int nod)
{
    int mij=(st+dr)>>1, rez1, rez2;

    if (y<st || x>dr) return -1;
    if (x<=st && y>=dr) return arb[nod];
    rez1=query(st, mij, nod<<1);
    rez2=query(mij+1, dr, (nod<<1)+1);
    return maxim(rez1, rez2);
}

void Solve()
{
    int i, op;

    for (i=1; i<=m; ++i)
    {
        scanf("%d%d%d", &op, &x, &y);
        if (!op) printf("%d\n", query(1, n, 1));
        else Update(1, n, 1);
    }
}

int main()
{
    freopen("arbint.in", "r", stdin);
    freopen("arbint.out", "w", stdout);

    Citeste();

    Solve();

    return 0;
}