Cod sursa(job #158579)

Utilizator M@2Te4iMatei Misarca M@2Te4i Data 13 martie 2008 18:23:46
Problema Hotel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#define vv 100001

using namespace std;

int w,n,m,p,a[4*vv+66],max;

int maxim(int w, int q)
{
    if (w>q)
        return w;
    else
        return q;
}

void pomisor(int nod, int st, int dr)
{
    if (st==dr)
    {
        a[nod]=w;
        return;
    }
    int mij=(st+dr)/2;
    if (p<=mij)
        pomisor(2*nod,st,mij);
    else
        pomisor(2*nod+1,mij+1,dr);
    a[nod]=maxim(a[2*nod],a[2*nod+1]);
}

void interogare(int nod, int st, int dr)
{
    if (p<=st && dr<=w)
    {
        if (max<a[nod])
            max=a[nod];
        return;
    }
    int mij=(st+dr)/2;
    if (p<=mij)
        interogare(2*nod,st,mij);
    if (mij<w)
        interogare(2*nod+1,mij+1,dr);
}

void citire()
{
    freopen("arbint.in","r",stdin);
    scanf("%d%d", &n, &m);
    for (int i=1; i<=n; i++)
    {
        scanf("%d", &w);
        p=i;
        pomisor(1,1,n);
    }
    int q;
    for (int i=1; i<=m; i++)
    {
        scanf("%d%d%d", &q, &p, &w);
        if (q)
            pomisor(1,1,n);
        else
        {
            max=-1;
            interogare(1,1,n);
            printf("%d\n",max);
        }
    }
    fclose(stdin);
}

int main()
{
    freopen("arbint.out","w",stdout);
    citire();
    fclose(stdout);
    return 0;
}