Cod sursa(job #2551646)

Utilizator Alex2421Nedelcu Alexandru Alex2421 Data 20 februarie 2020 01:55:12
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;

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

int const lim=100001;
int n,v[4*lim+66],poz,val,m,a,b,rez;

int mx(int x, int y)
{
    if(x>y) return x;
    return y;
}

void act(int nod, int st, int dr)
{
    if(st==dr)
    {
        v[nod]=val;
        return;
    }
    int mij=(st+dr)/2;
    if(poz<=mij) act(nod*2,st,mij);
    else act(nod*2+1,mij+1,dr);
    v[nod]=mx(v[nod*2],v[nod*2+1]);
}

void ask(int nod , int st, int dr)
{
    if(a<=st && dr<=b)
    {
        if(rez<v[nod]) rez=v[nod];
        return;
    }
    int mij=(st+dr)/2;
    if(a<=mij) ask(nod*2,st,mij);
    if(mij<b) ask(nod*2+1,mij+1,dr);
}

int main()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        in>>x;
        poz=i;
        val=x;
        act(1,1,n);
    }

    for(int i=1;i<=m;i++)
    {
        bool p;
        in>>p;
        if(p==0){
        in>>a>>b;
        rez=-1;
        ask(1,1,n);
        out<<rez<<'\n';
    }
    else
    {
        in>>poz>>val;
        act(1,1,n);
    }
    }
}