Cod sursa(job #3302494)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 8 iulie 2025 10:30:15
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <bits/stdc++.h>
using namespace std;

const int NMAX = 1e5;
const int BMAX = 320;
int a[NMAX + 1], b[BMAX + 1];

int main() {
    ifstream cin("arbint.in");
    ofstream cout("arbint.out");
    int n, m;
    cin >> n >> m;
    int szb = sqrt(n);
    for(int i = 1; i <= n; i++) {
        cin >> a[i];
        int idb = (i - 1) / szb + 1;
        b[idb] = max(b[idb], a[i]);
    }
    while(m--) {
        int op, x, y;
        cin >> op >> x >> y;
        if(op == 1) {
            a[x] = y;
            int idb = (x - 1) / szb + 1;
            b[idb] = 0;
            for(int i = (idb - 1) * szb + 1; i <= idb * szb; i++) {
                b[idb] = max(b[idb], a[i]);
            }
        } else {
            int sol = 0;
            while(x <= y) {
                if((x - 1) % szb == 0) {
                    if(x + szb - 1 <= y) {
                        int idb = (x - 1) / szb + 1;
                        sol = max(sol, b[idb]);
                        x += szb;
                    } else {
                        sol = max(sol, a[x]);
                        x++;
                    }
                } else {
                    sol = max(sol, a[x]);
                    x++;
                }
            }
            cout << sol << '\n';
        }
    }
    return 0;
}