Cod sursa(job #2695907)

Utilizator valeriucaraselCarasel Valeriu valeriucarasel Data 14 ianuarie 2021 20:26:31
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.29 kb
#include <iostream>
#include <fstream>

using namespace std;

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

const int INF=1000000005;

int t[270000],a,b,val,poz;

void actual (int p, int st, int dr)
{
    if (st==dr)
    {
        t[p]=val;
        return;
    }
    int m=(st+dr)/2;
    if (poz<=m)
    {
        actual(2*p,st,m);
    }
    else
    {
        actual(2*p+1,m+1,dr);
    }
    t[p]=max(t[2*p],t[2*p+1]);
}

int maxim(int p, int st, int dr)
{
    if (a<=st && dr<=b)
        return t[p];
    int m=(st+dr)/2;
    int maxst=-INF;
    int maxdr=-INF;
    if (a<=m)
    {
        maxst=maxim(2*p,st,m);
    }
    if (b>m)
    {
        maxdr=maxim(2*p+1,m+1,dr);
    }
    return max(maxst,maxdr);
}

int main()
{
    int n,m;
    in>>n>>m;
    int v[n+5];
    for (int i=1;i<=n;i++)
    {
        in>>v[i];
        val=v[i];
        poz=i;
        actual(1,1,n);
    }
    for (int o=1;o<=m;o++)
    {
        int k,st,dr;
        in>>k>>st>>dr;
        if (k==0)
        {
            a=st;
            b=dr;
            out<<maxim(1,1,n)<<"\n";
        }
        if (k==1)
        {
            poz=st;
            val=dr;
            actual(1,1,n);
        }
    }
    in.close();
    out.close();
    return 0;
}