Cod sursa(job #1601605)

Utilizator NacuCristianCristian Nacu NacuCristian Data 16 februarie 2016 01:07:08
Problema Arbori de intervale Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;


int sir[100010];
int a[200010],n,m;
int x,y,z;

void update(int st, int dr, int k)
{
    if(st==dr)
    {
        a[k]=sir[st];
        return;
    }
    int mij=(st+dr)/2;
    update(st,mij,2*k);
    update(mij+1,dr,2*k+1);
    a[k]=max(a[2*k],a[2*k+1]);
}

int maxim(int st, int dr, int k)
{
    if(st>=y && dr<=z)
    {
        return a[k];
    }

    if(st<=z && dr >=y)
    {
        int mij=(st+dr)/2;
        return max(maxim(st,mij,2*k),maxim(mij+1,dr,2*k+1));
    }
    return 0;
}

void citire()
{
    freopen("arbint.in","r",stdin);
    freopen("arbint.out","w",stdout);
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        scanf("%d ",&sir[i]);
    update(0,n-1,1);
    maxim(0,n-1,1);
    for(int i=0;i<m;i++)
    {

        scanf("%d %d %d",&x,&y,&z);
        if(x==0)
        {
            y--;
            z--;
            printf("%d\n",maxim(0,n-1,1));
        }
        else
        {
            y--;
            sir[y]=z;
            update(0,n-1,1);
        }
    }

}

int main()
{
    citire();

    return 0;
}