Cod sursa(job #2325119)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 21 ianuarie 2019 22:58:26
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <fstream>

using namespace std;
ifstream fin ("arbint.in");
ofstream fout ("arbint.out");
int arb[200005], 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);
    return max(rez1, rez2);
}
int main()
{
    fin >> n >> q;
    for(i=1;i<=n;i++)
    {
        fin >> val;
        actualizare(1, i, 1, n, val);
    }
    for(i=1;i<=n;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;
}