Cod sursa(job #1398818)

Utilizator andytosaAndrei Tosa andytosa Data 24 martie 2015 13:35:33
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>
#define DIM 100005
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");

int arb[4*DIM],n,m,i,j,q,x,y,start,stop,val,poz,ans;

void apdate(int nod,int left,int right)
{
    if(left == right){
        arb[nod] = val;
        return;
    }
    int mij = (left + right) / 2;
    if(poz <= mij)
        apdate(2 * nod,left,mij);
    else
        apdate(2 * nod + 1,mij + 1,right);

    arb[nod] = max(arb[2 * nod] , arb[2 * nod + 1]);
}
void cueri(int nod,int left,int right)
{
    if(right < start || left > stop)
        return;
    if(left >= start && right <= stop){
        ans = max(ans,arb[nod]);
        return;
    }
    int mij = (left + right) / 2;
    cueri(2 * nod,left,mij);
    cueri(2 * nod + 1,mij + 1,right);
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=n;++i){
        fin>>x;
        val = x;
        poz = i;
        apdate(1,1,n);
    }
    for(i=1;i<=m;++i){
        fin>>q>>x>>y;
        if(q == 1){
            poz = x;
            val = y;
            apdate(1,1,n);
        }
        else{
            start = x;
            stop = y;
            ans=0;
            cueri(1,1,n);
            fout<<ans<<'\n';
        }
    }
    return 0;
}