Cod sursa(job #2625865)

Utilizator mihaimbMihai Badea mihaimb Data 6 iunie 2020 10:31:15
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;

int V[100000], A[1000000];

void cons(int p, int l, int r)
{
    if(l==r)
    {
        A[p]=V[l];
    }

    else
    {
        cons(2*p, l, (l+r)/2);
        cons(2*p+1, (l+r)/2+1, r);

        if(A[2*p]>A[2*p+1])
        {
            A[p]=A[2*p];
        }
        else
        {
            A[p]=A[2*p+1];
        }
    }
}

int rez(int p, int l, int r, int a, int b)
{
    if(a>r || b<l) return -1;

    if(l>=a && r<=b) return A[p];

    int k=rez(2*p, l, (l+r)/2,a,b), j=rez(2*p+1, (l+r)/2+1,r,a,b);

    if(k==-1)
    {
        return j;
    }
    if(j==-1)
    {
        return k;
    }

    if(V[j]>V[k])
    {
        return j;
    }

    return k;
}

int main()
{
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");

    int n,m,op,t1, t2;

    fin>>n>>m;

    for(int i=0; i<n; i++)
    {
        fin>>V[i];
    }

    cons(1,0,n-1);

    for(int i=0; i<m; i++)
    {
        fin>>op>>t1>>t2;

        if(op==0)
        {
            t1--;
            t2--;
            fout<<rez(1,0,n-1,t1,t2)<<'\n';
        }
        else
        {
            t1--;
            V[t1]=t2;
            cons(1,0,n-1);
        }
    }

    return 0;
}