Cod sursa(job #2366976)

Utilizator waren4Marius Radu waren4 Data 4 martie 2019 23:30:39
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

ifstream f("arbint.in"); ofstream g("arbint.out");

int n,sol,m; int Arb[400005];

void Update(int nod, int st, int dr, int poz, int val) {
    int mij = (st + dr) / 2;
    if(st == dr) {
        Arb[nod] = val;
        return;
    }
    if(poz <= mij) {
        Update(nod*2, st, mij, poz, val);
    }
    if(poz > mij) {
        Update(nod*2 + 1, mij+1, dr, poz, val);
    }
    Arb[nod] = max(Arb[nod*2], Arb[nod*2 +1]);
}

void Query(int nod, int st, int dr, int x, int y) {
    int mij = (st+dr) / 2;
    if(st <= x && dr >= y) {
        sol = max(sol,Arb[nod]);
        return;
    }
    if(x <= mij) {
        Query(nod*2,st,mij,x,y);
    }
    if(y > mij) {
        Query(nod*2 + 1, mij+1, dr, x, y);
    }
}

int main() {
    int i, tip, x, y;
    f>>n>>m;
    for(i = 1; i <= n; ++i) {
        f>>x;
        Update(1,1,n,i,x);
    }
    for(i = 1; i <= m; ++i) {
        f>>tip>>x>>y;
        if(tip) {
            Update(1,1,n,x,y);

        }
        else {
            sol = 0;
            Query(1,1,n,x,y);
            g<<sol<<'\n';
        }
    }
    return 0;
}