Cod sursa(job #2360714)

Utilizator Vlad_NituNitu Vlad-Petru Vlad_Nitu Data 2 martie 2019 09:06:09
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>
using namespace std;
int a,b,pos,val,cer;
int N , M , T[1<<20];
ifstream f ("arbint.in") ;
ofstream g ("arbint.out") ;
void update(int nod , int st , int dr);
int querry(int nod , int st , int dr) ;

void update (int nod , int st , int dr)
{
    if (st == dr) T[nod] = val ;
    else
    {
        int mij = (st+dr)/2;
        if (pos <= mij) update(nod*2,st,mij) ;
        else update(nod*2+1,mij+1,dr) ;

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

int querry (int nod , int st , int dr)
{
        int mij ;
        int x1 = 0 , x2 = 0 ;

        if (a <= st && b >= dr) return T[nod];
        else
        {
            int mij = ( st + dr ) / 2;
            if (a <= mij) x1 = querry(nod*2,st,mij) ;
            if (b >= mij + 1) x2 = querry(nod*2+1,mij+1,dr);

            return max ( x1 , x2 ) ;
        }
}

int main()
{
    f >> N >> M ;
    for (int i = 1 ; i <= N ; ++i)
    {
        f >> val ;
        pos = i ;
        update(1,1,N);
    }
    for (int i = 1 ; i <= M ; ++i)
    {
        f >> cer >> a >> b;
        if (cer == 1)
        {
            pos = a;
            val = b;
            update(1,1,N) ;
        }
        else g << querry(1,1,N) << '\n';
    }
}