Cod sursa(job #1050466)

Utilizator Aleks10FMI - Petrache Alex Aleks10 Data 8 decembrie 2013 17:00:09
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <iostream>
#include <fstream>

#define MAX_N 100000
using namespace std;

int arbore[4*MAX_N+2],n,m;
int maxim,a,b;

void update(int nod, int st, int dr, int index, int val){
    if(st==dr){
        arbore[nod]=val;
        return;
    }
        int mij=(st+dr)/2;
        if(index<=mij)
            update(2*nod,st,mij,index,val);
        else
            update(2*nod+1,mij+1,dr,index,val);

        if(arbore[2*nod]>arbore[2*nod+1])
            arbore[nod]=arbore[2*nod];
        else
            arbore[nod]=arbore[2*nod+1];
}

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

int main()
{
    int i,x;
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>n>>m;
    for(i=1;i<=n;i++){
        f>>x;
        update(1,1,n,i,x);
    }
    for(i=1;i<=m;i++){
        f>>x>>a>>b;
        if(x==0){
            maxim=-1;
            tell_maxim(1,1,n);
            g<<maxim<<'\n';
        }
        else{
            update(1,1,n,a,b);
        }
    }
    return 0;
}