Cod sursa(job #1937557)

Utilizator Athena99Anghel Anca Athena99 Data 24 martie 2017 00:52:52
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>

using namespace std;

ifstream fin("arbint.in");
ofstream fout("arbint.out");

const int nmax= 100000;
const int pmax= 262144;

int arb[pmax+1];

void arb_upd( int x, int y ) {
    arb[x]= y;
    for ( x/= 2; x>0; x/= 2 ) {
        arb[x]= max(arb[x*2], arb[x*2+1]);
    }
}

int arb_query( int x, int l, int r, int a, int b ) {
    if ( r<a || b<l )
        return 0;
    if ( a<=l && r<=b ) {
        return arb[x];
    }
    return max(arb_query(x*2, l, (l+r)/2, a, b), arb_query(x*2+1, (l+r)/2+1, r, a, b));
}

int main(  ) {
    int n, m, n2;
    fin>>n>>m;
    for ( n2= 1; n2<n; n2*= 2 ) ;

    for ( int i= 1, x; i<=n; ++i ) {
        fin>>x;
        arb_upd(i-1+n2, x);
    }

    for ( int i= 1, x, y, z; i<=m; ++i ) {
        fin>>z>>x>>y;

        if ( z==0 ) {
            fout<<arb_query(1, 1, n2, x, y)<<"\n";
        } else {
            arb_upd(n2-1+x, y);
        }
    }

    return 0;
}