Cod sursa(job #1771473)

Utilizator margikiMargeloiu Andrei margiki Data 5 octombrie 2016 17:54:59
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
# include <bits/stdc++.h>
# define NR 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int i,j,n,m,a,b,tip,maxx,val;
int ARB[4*NR];
void update (int nod, int ci, int cs, int poz, int val) {
    if (ci==poz && poz==cs) {
        ARB[nod]=val;
    } else {
        int mij=(ci + cs)/2;

        if (poz<=mij) update (2*nod, ci, mij, poz, val);
                 else update (2*nod+1, mij+1, cs, poz, val);

        ARB[nod]=max(ARB[2*nod], ARB[2*nod+1]);
    }
}
void query (int nod, int ci, int cs, int CI, int CS) {
    if (CI<=ci && cs<=CS) {
        maxx=max(maxx, ARB[nod]);
    } else {
        int mij=(ci + cs)/2;

        if (CI<=mij) query (2*nod, ci, mij, CI, CS);
        if (mij<CS) query (2*nod+1, mij+1, cs, CI, CS);
    }
}
int main ()
{
    f>>n>>m;
    for (int i=1; i<=n; ++i) {
        f>>val;

        update (1, 1, n, i, val);
    }

    for (int i=1; i<=m; ++i) {
        f>>tip>>a>>b;
        if (tip==0) { // query
            maxx=0;
            query (1, 1, n, a, b);
            g<<maxx<<"\n";
        } else {
            update (1, 1, n, a, b);
        }
    }

    return 0;
}