Cod sursa(job #1157180)

Utilizator florin.ilieFlorin Ilie florin.ilie Data 28 martie 2014 12:10:53
Problema Cautare binara Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
using namespace std;

int arb[400099];

int n,m,poz,val,mx,x;


void adaugare(int nod,int st,int dr)
{
     if(st==dr){
        arb[nod]=val;
        return;
    }
    int div=(st+dr)/2;
    if(poz<=div)    adaugare(2*nod,st,div);
    else            adaugare(2*nod+1,div+1,dr);
    arb[nod] = ((arb[2*nod]>arb[2*nod+1])?arb[2*nod]:arb[2*nod+1]);
}

void maxim (int nod,int st,int dr)
{
    if(poz<=st && dr<=val){
        if(arb[nod]>mx)
            mx=arb[nod];
        return;
    }
    int div=(st+dr)/2;
    if(poz <= div)  maxim(2*nod,st,div);
    if(div < val)   maxim(2*nod+1,div+1,dr);
}

int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>x;
        poz=i;
        val=x;
        adaugare(1,1,n);
    }
    for(int i=1;i<=m;i++)
    {
        fin>>x>>poz>>val;
        if(x==0){
            mx=0;
            maxim(1,1,n);
            fout<<mx<<'\n';
        }else{
            adaugare(1,1,n);
        }
    }
    return 0;
}