Cod sursa(job #2403304)

Utilizator xXoctavianXxStanescu Matei Octavian xXoctavianXx Data 11 aprilie 2019 13:57:40
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.32 kb
#include <iostream>
#include <fstream>
using namespace std;

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

int n,m;
int a,b;
int arbore[400007];

void update(int st, int dr, int i, int poz, int nr)
{
    int mijl=(dr+st)/2;
    if(st>poz || dr<poz)
    {
        return;
    }
    if(st==poz && dr==poz)
    {
        arbore[i]=nr;
        return;
    }
    update(st,mijl,2*i,poz,nr);
    update(mijl+1,dr,2*i+1,poz,nr);
    arbore[i]=max(arbore[i*2],arbore[i*2+1]);
}

int query(int a, int b, int st, int dr, int i)
{
    int mijl=(st+dr)/2;
    if(st==a && dr==b)
    {
        return arbore[i];
    }
    if (b<=mijl)
    {
        return query(a,b,st,mijl,2*i);
    }
    else
    {
        if (a>mijl)
        {
            return query(a,b,mijl+1,dr,2*i+1);
        }
        else
        {
            return max(query(a,mijl,st,mijl,2*i),query(mijl+1,b,mijl+1,dr,2*i+1));
        }
    }
}
int main()
{
    fin>>n>>m;
    int x;
    for(int i=1; i<=n; i++)
    {
        fin>>x;
        update(1,n,1,i,x);
    }
    for(int i=0; i<m; i++)
    {
        int o;
        fin>>o>>a>>b;
        if(o==1)
        {
            update(1,n,1,a,b);
        }
        if(o==0)
        {
            fout<<query(a,b, 1, n, 1)<<"\n";
        }
    }
    return 0;
}