Cod sursa(job #1036843)

Utilizator eugen_ptrEugen Patru eugen_ptr Data 19 noiembrie 2013 17:44:56
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <cstdio>
using namespace std;

int n,m;
int v[400000];
int a,b;
int x;
int p;
int maxim;
int tip;

void update(int pos,int st,int dr)
{
    if (st==dr)
    {
        v[pos]=x;
        return;
    }
    int mij=(st+dr)/2;
    if (p <= mij)
        update(2*pos, st, mij);
    else
        update(2*pos+1, mij+1, dr);
    v[pos]=max(v[2*pos], v[2*pos+1]);
}

void query(int pos, int st, int dr)
{
    if (a<=st && dr<=b)
    {
        maxim=max(maxim, v[pos]);
        return;
    }
    int mij=(st+dr)/2;
    if (a <= mij)
        query(pos*2, st, mij);
    if (b > mij)
        query(pos*2+1, mij+1, dr);
}

void citire()
{
    scanf("%d %d",&n,&m);
    for (p=1; p<=n; p++)
    {
        scanf("%d",&x);
        update(1,1,n);
    }
    for (int i=1; i<=m; i++)
    {
        scanf("%d%d%d",&tip,&a,&b);
        if (tip)
        {
            p=a;
            x=b;
            update(1,1,n);
        }
        else
        {
            maxim=-1;
            query(1,1,n);
            printf("%d\n",maxim);
        }

    }
}


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