Cod sursa(job #1852637)

Utilizator hasmasandragosHasmasan Dragos hasmasandragos Data 20 ianuarie 2017 23:52:54
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;

ifstream f("arbint.in");
ofstream g("arbint.out");

const int nmax=100005;
int arb[44*nmax+66],poz,val,bg,en,maxim_actual,n,t;

void Update (int nod ,int stanga , int dreapta)
{
   int mijloc;
   if (stanga==dreapta)
   {
       arb[nod]=val;
       return;
   }

   mijloc=(stanga+dreapta)/2;
   if (poz<=mijloc) Update(2*nod,stanga,mijloc);
   else Update(2*nod+1,mijloc+1,dreapta);

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

void Query (int nod , int stanga , int dreapta)
{
    int mijloc;
    if (bg<=stanga && dreapta<=en)
    {
        maxim_actual=max(maxim_actual,arb[nod]);
        return;
    }

    mijloc=(stanga+dreapta)/2;
    if (bg<=mijloc) Query(2*nod,stanga,mijloc);
    if (mijloc<en) Query(2*nod+1,mijloc+1,dreapta);

}

int main()
{
    f>>n>>t;
    int op,i;

    for (i=1;i<=n;i++)
    {
        f>>val;
        poz=i;
        Update(1,1,n);
    }

    while (t--)
    {
        f>>op;
        if (op)
        {
            f>>poz>>val;
            Update(1,1,n);
        }
        else
        {
            f>>bg>>en;
            maxim_actual=0;
            Query(1,1,n);
            g<<maxim_actual<<'\n';
        }
    }

    return 0;
}