Cod sursa(job #2621683)

Utilizator paulaiugaPaula Iuga paulaiuga Data 30 mai 2020 17:03:48
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <bits/stdc++.h>
using namespace std;

ifstream in("arbint.in");
ofstream out("arbint.out");

int arbint[60000];

void Actualizeaza(int nod, int st, int dr,int val, int poz)
{
    if(st == dr)
    {
        arbint[nod] = val;
        return;

    }

    int mijl = (st + dr)/2;
    if(poz <= mijl)

        Actualizeaza(2*nod, st, mijl, val, poz);

    else

        Actualizeaza(2*nod + 1, mijl + 1, dr, val, poz);


    arbint[nod] = max(arbint[2*nod], arbint[2*nod + 1]);



}

void Interogare(int nod, int st, int dr, int start, int stop, int &ma)
{
    if(st >= start && dr <= stop)
    {
        if(ma < arbint[nod])
        {
            ma = arbint[nod];

        }
         return;
    }

    int mijl = (st + dr)/2;
    if(start <= mijl)
        Interogare(2*nod, st, mijl, start, stop, ma);
    if(mijl < stop)
        Interogare(2*nod+1, mijl+1, dr, start, stop, ma);



}




int main()
{
    int n,m;

    int op, x, y;
    in>>n>>m;


    for(int i = 0; i<n; i++)
    {
        in>>x;
        Actualizeaza(1,1,n,x,i+1);
        //arbint[i];
    }



    int  ma = -1;
    while(m)
    {
        in>>op>>x>>y;
        switch(op)
        {
        case 0:
            ma = -1;
            Interogare(1, 1, n, x, y, ma);
            out<<ma<<"\n";
            break;
        case 1:
            Actualizeaza(1,1,n,y,x); //pe poz y se pune val x
            break;
        }
        m--;
    }



    return 0;
}