Cod sursa(job #2623089)

Utilizator dianapingu1Diana Vasiliu dianapingu1 Data 2 iunie 2020 16:35:34
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

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

int arb[300005];

void update(int nod, int st, int dr, int idx, int val)
{
    if (st == dr) {
        arb[nod] = val;
        return;
    }
    int mij = st + (dr-st)/2;

    if (idx <= mij)
        update(2*nod, st, mij, idx, val);
    else
        update(2*nod + 1, mij+1, dr, idx, val);

    arb[nod] = max(arb[2*nod], arb[2*nod+1]);
}

int maxim(int nod, int st, int dr, int l, int r)
{
    if (l <= st && dr <= r)
        return arb[nod];

    int mij = st + (dr-st)/2;
    int left = -1, right = -1;

    if (l <= mij)
        left = maxim(2*nod, st, mij, l, r);
    if (r > mij)
        right = maxim(2*nod+1, mij+1, dr, l, r);

    return max(left,right);
}


int main()
{
    int n,m,a,b,op;

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

    for (int i=0; i<m; i++) {
        fin>>op>>a>>b;
        switch(op){
        case 0:
            fout<<maxim(1,1,n,a,b)<<'\n';
            break;
        case 1:
            update(1,1,n,a,b);
            break;
        }
    }

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

    return 0;
}