Cod sursa(job #2322333)

Utilizator Stefan_PiscuPiscu Stefan Constantin Stefan_Piscu Data 17 ianuarie 2019 18:19:13
Problema Arbori de intervale Scor 100
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 ar[1000001], n, q, maxi;

void Update(int nod, int p, int st, int dr, int x)
{
    if(st==dr)
        ar[nod]=x;
    else
    {
        int mij=(st+dr)/2;
        if(p<=mij)
            Update(nod*2, p, st, mij, x);
        else
            Update(nod*2+1, p, mij+1, dr, x);
        ar[nod]=max(ar[nod*2], ar[nod*2+1]);
    }
}

void query(int nod, int st, int dr, int a, int b)
{
    if(st>=a&&dr<=b) maxi=max(ar[nod], maxi);
    else
    {
        int mij=(st+dr)/2;
        if(a<=mij) query(nod*2, st, mij, a, b);
        if(b>=mij+1) query(nod*2+1, mij+1, dr, a, b);
    }
}

int main()
{
    fin>>n>>q;
    for(int i=1;i<=n;++i)
    {
        int x;
        fin>>x;
        Update(1, i, 1, n, x);
    }
    for(int i=1;i<=q;++i)
    {
        bool type;
        fin>>type;
        if(type)
        {
            int p, x;
            fin>>p>>x;
            Update(1, p, 1, n, x);
        }
        else
        {
            int a, b;
            fin>>a>>b;
            maxi=0;
            query(1, 1, n, a, b);
            fout<<maxi<<"\n";
        }
    }
    return 0;
}