Cod sursa(job #2014190)

Utilizator anamaria41Raicu Ana anamaria41 Data 23 august 2017 01:47:15
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <cstdio>
#include <algorithm>
#define N 100001

using namespace std;

int n,m,start,finish,arb[4*N+50],poz,val,nmax,x,a,b,q;

void Query (int nod,int L,int R)
{
    if (start <=L && finish>=R)
    {
        if (arb[nod]>nmax) nmax=arb[nod];
        return;
    }

    int M=(L+R)/2;
    if (start<=M) Query(2*nod, L, M);
    if (finish>M) Query(2*nod+1, M+1, R);

}

void Update(int nod, int L, int R)
{
    if (L==R)
    {
        arb[nod]=val;
        return;
    }

    int M=(L+R)/2;
    if (poz<=M) Update(2*nod,L,M);
    else Update(2*nod+1,M+1,R);

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

}


int main()
{

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

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

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

    for (;m;m--)
    {
        scanf("%d%d%d", &q, &a, &b);
        if (q)
        {
            poz=a;
            val=b;
            Update (1,1,n);
        }
        else
        {
            nmax=-1;
            start=a; finish=b;
            Query(1,1,n);
            printf ("%d\n", nmax);
        }

    }

}