Cod sursa(job #2423082)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 20 mai 2019 18:54:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#define Nmax 100005

using namespace std;

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

int n, m, x, c, a, b;
int arb[Nmax*4];

void update (int nod, int lft, int rgt, int pos, int val)
{
    if (lft == rgt)
    {
        arb[nod]=val;
        return;
    }

    int md=(lft+rgt)/2;

    if (pos <= md) update(2*nod, lft, md, pos, val);
    else update(2*nod+1, md+1, rgt, pos, val);
    arb[nod]=max(arb[2*nod], arb[2*nod+1]);
}

int query(int nod, int lft, int rgt, int lft_q, int rgt_q)
{
    if (rgt < lft_q || rgt_q < lft) return 0;

    if (lft >= lft_q && rgt_q >= rgt) return arb[nod];

    int md=(lft+rgt)/2;

    return max(query(2*nod, lft, md, lft_q, rgt_q), query(2*nod+1, md+1, rgt, lft_q, rgt_q));
}

int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; i++)
    {
        f >> x;
        update(1, 1, n, i, x);
    }
    while (m--)
    {
        f >> c >> a >> b;
        if (c == 1) update(1, 1, n, a, b);
        else g << query(1, 1, n, a, b) << '\n';
    }

    return 0;
}