Cod sursa(job #1996169)

Utilizator dragos231456Neghina Dragos dragos231456 Data 30 iunie 2017 14:03:42
Problema Arbori de intervale Scor 40
Compilator cpp Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,arb[100005],nod,a,b,val,op,maxim;

void afisare()
{
    int k=0;
    for(int i=1;i<=4;++i)
    {
        for(int j=1;j<=(1<<i-1);++j)
        {
            ++k;
            cout<<arb[k]<<' ';
        }
        cout<<endl;
    }
}

void update(int nod,int lt,int rt,int pos)
{
    if(lt==rt)
    {
        arb[nod]=val;
        return;
    }
    int md=(lt+rt)/2;
    if(pos<=md) update(nod*2,lt,md,pos);
    else update(nod*2+1,md+1,rt,pos);

    arb[nod]=max(arb[nod*2],arb[nod*2+1]);
}

void query(int nod,int lt,int rt,int x,int y)
{
    if(x<=lt && rt<=y)
    {
        maxim=max(maxim,arb[nod]);
        return;
    }
    int md=(lt+rt)/2;
    if(lt==rt) return;
    if(md>=x) query(nod*2,lt,md,x,y);
    if(md<y) query(nod*2+1,md+1,rt,x,y);

}

int main()
{
    f>>n>>m;
    for(int i=1;i<=n;++i)
    {
        f>>val;
        update(1,1,n,i);
    }

    for(int i=1;i<=m;++i)
    {
        f>>op>>a>>b;
        if(!op)
        {
            maxim=0;
            query(1,1,n,a,b);
            g<<maxim<<'\n';
        }
        else
        {
            val=b;
            update(1,1,n,a);
        }
    }

    return 0;
}