Cod sursa(job #881666)

Utilizator DalmaDoloczki Dalma Dalma Data 18 februarie 2013 13:51:37
Problema Arbori de intervale Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.33 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

fstream f("arbint.in",ios::in);
fstream g("arbint.out",ios::out);

long long n,m,i,j,a,b,c,x[500005],maxi,start,finish,maximum,ert,pos;

int maxim (int a, int b)
{
    if (a>b) return a;
    else return b;
}

void szamol(int cs, int bal, int jobb)
{
    if (start<=bal && jobb<=finish)
    {
        if ( maximum<x[cs] ) maximum=x[cs];
       return;
    }
    int kozep = (bal+jobb)/2;
     if ( start <= kozep ) szamol(2*cs,bal,kozep);
     if ( kozep < finish ) szamol(2*cs+1,kozep+1,jobb);
}

void update(int cs,int bal, int jobb)
{
    if (jobb==bal)
    {
        x[cs]=ert;
        return ;
    }
    int kozep=(jobb+bal)/2;
    if (pos<=kozep) update(2*cs,bal,kozep);
    else update(2*cs+1,kozep+1,jobb);
    x[cs] = maxim( x[2*cs], x[2*cs+1] );
}


int main()
{
    f>>n>>m;
    for (i=1;i<=n;i++)
    {
        f>>a;
        pos=i;
        ert=a;
        update(1,1,n);
    }
    for (i=1;i<=m;i++)
    {
        f>>a>>b>>c;
        if (a==0)
        {
            maximum=-1;
            start=b;
            finish=c;
            szamol(1,1,n);
            g<<maximum<<"\n";
        }
        else
        {
            pos=b;
            ert=c;
            update(1,1,n);

        }
    }
}