Cod sursa(job #1647287)

Utilizator NacuCristianCristian Nacu NacuCristian Data 10 martie 2016 19:48:49
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int arbint[400040];
int n,m,a,b;

int adaugare(int st, int dr, int k)
{
    if(st==dr && st==a)
    {
        arbint[k]=b;
        return b;
    }
    int mij=(st+dr)/2;
    if(a>mij)
        return arbint[k]=max(adaugare(mij+1,dr,2*k+1),arbint[2*k]);
    return arbint[k]=max(adaugare(st,mij,2*k),arbint[2*k+1]);
}

int ma=-1;

void maxim(int st, int dr, int k)
{
    if(st>=a && b>=dr)
    {
        if(arbint[k]>ma)
            ma=arbint[k];
        return;
    }
    int mij=(st+dr)/2;
    if(b>=mij+1)
        maxim(mij+1,dr,2*k+1);
    if(a<=mij)
        maxim(st,mij,2*k);
}

void citire()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
    {
        a=i;
        scanf("%d",&b);
        adaugare(1,n,1);
    }
    for(int i=0;i<m;i++)
    {
        int x;
        scanf("%d %d %d",&x,&a,&b);
        if(x==1)
            adaugare(1,n,1);
        else
        {
            ma=-1;
            maxim(1,n,1);
            printf("%d\n",ma);
        }
    }
}

int main()
{
    citire();
    return 0;
}