Mai intai trebuie sa te autentifici.

Cod sursa(job #2817358)

Utilizator atpkekwStoian George atpkekw Data 13 decembrie 2021 16:04:59
Problema Arbori de intervale Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 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];
int p= 1;

void init( int x ) {
    if ( x<p ) {
        init (x*2), init(x*2+1);
        arb[x]= max(arb[x*2], arb[x*2+1]);
    }
}

void change( int a, int b ) {
    arb[p+a-1]= b;
    for ( int i= (p+a-1)/2; i>0; i>>= 1 ) {
        arb[i]= max(arb[i*2], arb[i*2+1]);
    }
}

int solve( int a, int b, int k, int x, int y ) {
    if ( a<=x && y<=b ) {
        return arb[k];
    } else if ( y<a || x>b ) {
        return 0;
    } else {
        return max(solve(a, b, k*2, x, (x+y)/2), solve(a, b, k*2+1, (x+y)/2+1, y));
    }
}

int main(  ) {
    int n, m;
    fin>>n>>m;
    for ( ; p<n; p<<= 1 ) ;
    for ( int i= 0; i<n; ++i ) {
        fin>>arb[p+i];
    }

    init(1);

    for ( int i= 0, x, a, b; i<m; ++i ) {
        fin>>x>>a>>b;
        if ( x==1 ) {
            change(a, b);
        } else {
            fout<<solve(a, b, 1, 1, p)<<"\n";
        }
    }

    return 0;
}