Cod sursa(job #2626458)

Utilizator UrsaWarlordFrincu Madalin Gabriel UrsaWarlord Data 6 iunie 2020 15:45:49
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.37 kb
#include <bits/stdc++.h>
using namespace std;
#define dim 100001

int N,M;
int maxArb[4*dim+66];
int start,finish,val,pos,maxim;
int X,A,B;

void Actualizare(int nod, int st, int dr)
{
    if(st == dr)
    {
        maxArb[nod] = val;
        return;
    }

    int div = (st+dr)/2;
    if(pos<=div)
        Actualizare(2*nod, st, div);
    else
        Actualizare(2*nod+1,div+1,dr);
    maxArb[nod] = max(maxArb[2*nod],maxArb[2*nod+1]);

}

void Interogare(int nod, int st, int dr)
{
    if(start <= st && dr <= finish)
    {
        if(maxArb[nod] > maxim)
            maxim = maxArb[nod];
        return;
    }
    int div = (st+dr)/2;
    if(div >= start)
        Interogare(2*nod,st,div);
    if(div < finish)
        Interogare(2*nod+1, div+1, dr);
}

int main()
{
    int i,j;
    ifstream f("arbint.in");
    ofstream g("arbint.out");
    f>>N>>M;
    for(i=1;i<=N;i++)
    {
        f >> X;
        pos = i;
        val = X;
        Actualizare(1,1,N);
    }

    for(i=1;i<=M;i++)
    {
        f >> X >> A >> B;
        switch(X)
        {
        case 0:
            maxim = -1;
            start = A;
            finish = B;
            Interogare(1,1,N);
            g << maxim << "\n";
            break;
        case 1:
            pos = A;
            val = B;
            Actualizare(1,1,N);
        }
    }

}