Cod sursa(job #2904510)

Utilizator NicuDirvaDirva Nicolae NicuDirva Data 17 mai 2022 23:51:39
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include<iostream>
#include<fstream>

using namespace std;

int a[400001], n;

int suma(int n, int st, int dr, int x, int y){
    int v1 = 0, v2 = 0, mij = (st + dr) / 2;

    if(st >= x && y >= dr)
        return a[n];
    if(x <= mij)
        v1 = suma(n * 2, st, mij, x, y);
    if(y > mij)
        v2 = suma(n * 2 + 1, mij + 1, dr, x, y);
    return max(v1, v2);
}

void update(int n, int st, int dr, int pozitie, int valoare){
    if(st == dr) {
        a[n] = valoare;
        return;
    }
    int mij = (st + dr) / 2;
    if(pozitie <= mij)
        update(n * 2, st, mij, pozitie, valoare);
    else
        update(n * 2 + 1, mij + 1, dr, pozitie, valoare);
    a[n] = max(a[2 * n], a[2 * n + 1]);
}

int main()
{
    int m, x, op, y, i;

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

    fin >> n >> m;
    for(i = 1; i <= n; i++) {
        fin >> x;
        update(1, 1, n, i, x);
    }

    for(i = 0; i < m; i++) {
        fin >> op >> x >> y;
        if(op == 0)
            fout << suma(1, 1, n, x, y) << '\n';
        else
            update(1, 1, n, x, y);
    }
    return 0;
}