Cod sursa(job #3266658)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 9 ianuarie 2025 19:12:54
Problema Arbori de intervale Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.49 kb
#include <bits/stdc++.h>
using namespace std;
#define endline '\n'

const int NMAX = 100001;

int aint[NMAX], maxim = -1;

void update(int node, int left, int right, int position, int val) {
    if (left == right) {
        aint[node] = val;
    }else {
        int mid = (left + right) / 2;
        if (position <= mid) {
            update(node * 2, left, mid , position, val);
        }
        if(position > mid) {
            update(node * 2 + 1, mid + 1, right , position, val);
        }
        aint[node] = max(aint[node * 2], aint[node * 2 + 1]);
    }
}

void query(int node, int l, int r, int left, int right) {
    if(l >= left && r <= right) {
        maxim = max(maxim, aint[node]);
    }else {
        int mid = (l + r) / 2;
        if (left <= mid ) {
            query(node * 2, l, mid, left, right);
        }
        if(right > mid) {
            query(node * 2 + 1, mid + 1 , r, left, right);
        }
    }
}

int32_t main(void) {
    ofstream cout("arbint.out");
    ifstream cin("arbint.in");
    int n, Q;
    cin >> n >> Q;
    for(int i = 1;i <= n;i++) {
        int x;
        cin >>x ;
        update(1,1,n,i,x);
    }
    while(Q--) {
        int q, x, y;
        cin >> q  >> x >> y;
        if(q == 1) {
            /// update this
            update(1,1,n,x,y);
        }else {
            maxim = -1e9; /// initializing with a minus infinite
            query(1,1,n,x,y);
            cout << maxim << endline;
        }
    }
}