Cod sursa(job #2325124)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 21 ianuarie 2019 23:02:21
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.24 kb
#include <fstream>

using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int arb[1000001], maxx, i, n, q, tip, a, b, poz, val;
void actualizare(int in, int i, int st, int dr, int val)
{
    if(st==dr)
       {
            arb[in]=val;
            return;
       }
    int mij=(st+dr)/2;
    if(mij>=i)
        actualizare(in*2, i, st, mij, val);
    else actualizare(in*2+1, i, mij+1, dr, val);
    arb[in]=max(arb[in*2], arb[in*2+1]);
}
int raspuns(int in, int st, int dr, int a, int b)
{
    if(a<=st&&dr<=b)
        return arb[in];
    int rez1=0, rez2=0;
    int mij=(dr+st)/2;
    if(!(b<st||a>mij))
        rez1=raspuns(in*2, st, mij, a, b);
    if(!(b<mij+1||a>dr))
        rez2=raspuns(in*2+1, mij+1, dr, a, b);
    int rez=max(rez1, rez2);
    return rez;
}
int main()
{
    fin >> n >> q;
    for(i=1;i<=n;i++)
    {
        fin >> val;
        actualizare(1, i, 1, n, val);
    }
    for(i=1;i<=q;i++)
    {
        fin >> tip;
        if(tip==1)
        {
            fin >> poz >> val;
            actualizare(1, poz, 1, n, val);
        }
        else
        {
            fin >> a >> b;
            fout << raspuns(1, 1, n, a, b) << '\n';
        }
    }
    return 0;
}