Cod sursa(job #2312957)

Utilizator Alex_BubBuburuzan Alexandru Alex_Bub Data 5 ianuarie 2019 20:13:26
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <algorithm>

using namespace std;

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

const int NMax = 100000;

int N, M, A[4 * NMax];

void Update(int st, int dr, int i, int poz, int val)
{
    if(st == dr) {
        A[i] = val;
        return;
    }

    int m = (st + dr) >> 1;

    if(poz <= m)
        Update(st, m, 2 * i, poz, val);
    else
        Update(m + 1, dr, 2 * i + 1, poz, val);

    A[i] = max(A[2 * i], A[2 * i + 1]);
}

int MaxQ(int st, int dr, int i, int a, int b)
{
    if(a <= st && dr <= b)
        return A[i];

    if(b < st || dr < a)
        return 0;

    int m = (st + dr) >> 1;

    return max(MaxQ(st, m, 2 * i, a, b), MaxQ(m + 1, dr, 2 * i + 1, a, b));
}

int main()
{
    int x, a, b;

    fin >> N >> M;

    for(int i = 1; i <= N; i++) {
        fin >> x;

        Update(1, N, 1, i, x);
    }

    while(M--) {
        fin >> x >> a >> b;

        if(!x)
            fout << MaxQ(1, N, 1, a, b) << '\n';
        else
            Update(1, N, 1, a, b);
    }

    fin.close();
    fout.close();

    return 0;
}