Cod sursa(job #2381202)

Utilizator PandaChanTrusca Daria PandaChan Data 16 martie 2019 11:28:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n, m;
int ar[400000], a[100000];
void construire(int st, int dr, int x)
{
    if(st==dr)
    {
        ar[x]=a[st];
        return;
    }
    int mij=(st+dr)/2;
    construire(st, mij, x*2);
    construire(mij+1, dr, x*2+1);
    ar[x]=max(ar[x*2], ar[x*2+1]);
}
void schimbare(int st, int dr, int x, int poz, int v)
{
    if(st==dr)
    {
        ar[x]=v;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij)
        schimbare(st, mij, 2*x, poz, v);
    else
        schimbare(mij+1, dr, 2*x+1, poz, v);
    ar[x] = max(ar[2*x], ar[2*x+1]);


}
int maxim(int st, int dr, int x, int pozInceput, int pozFinal)
{
    if(st>=pozInceput && dr<=pozFinal)
        return ar[x];
    if(pozFinal<st || pozInceput>dr)
        return -999999;
    int mij=(st+dr)/2;
    return max(maxim(st, mij, x*2, pozInceput, pozFinal), maxim(mij+1, dr, x*2+1, pozInceput, pozFinal));
}
int main()
{
    f>>n>>m;
    for(int i=1; i<=n; i++)
        f>>a[i];
    construire(1, n, 1);
    for(int t=0; t<m; t++)
    {
        int p, x, y;
        f>>p>>x>>y;
        if(p==0)
            g<<maxim(1, n, 1, x, y)<<'\n';
        //else
        if(p==1)
        {
            schimbare(1, n, 1, x, y);
           /* for(int i=1; i<=15; i++)
                g<<ar[i]<<' ';
            g<<endl;*/
        }

    }
    return 0;
}