Cod sursa(job #2614361)

Utilizator buhaidarius@gmail.comBuhai Darius [email protected] Data 11 mai 2020 17:31:50
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <iostream>
#include <fstream>
#include <vector>

#define MAXN 100001

using namespace std;

int int_tree[MAXN*4];
int maxim;

void maxi(int l, int r, int qs, int qe, int i){
    if (qs <= l && qe >= r){
        maxim = max(maxim, int_tree[i]);
        return;
    }
    int mid = (l+r)/2;
    if(qs<=mid) maxi(l, mid, qs, qe, 2*i+1);
    if(qe>mid) maxi(mid+1, r, qs, qe, 2*i+2);
}

void change_element(int l, int r, int i, int k, int val){
    if(l==r){
        int_tree[i] = val;
        return;
    }
    int mid = (l+r)/2;

    if(k<=mid) change_element(l, mid, i*2+1, k, val);
    else change_element(mid+1, r, i*2+2, k, val);
    int_tree[i] = max(int_tree[2*i+1], int_tree[2*i + 2]);
}

int main() {
    ifstream fin("arbint.in");
    ofstream fout("arbint.out");
    int n, m, x;
    /// Read data
    fin>>n>>m;
    for(int i=0;i<n;++i){
        fin>>x;
        change_element(0,n-1,0,i, x);
    }
    /// Walk tree for every range
    int a, b, op;
    while(m--){
        fin>>op>>a>>b;
        if(op==0){
            maxim = -999;
            maxi(0, n-1,a-1, b-1, 0);
            fout<<maxim<<'\n';
        }
        else change_element(0,n-1,0,a-1, b);
    }
    return 0;
}