Cod sursa(job #1699291)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 6 mai 2016 22:51:17
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.21 kb
#include <bits/stdc++.h>
#define DIM 100005

using namespace std;

int Arb[4*DIM];

int N,Q,a,b,o,maxim;

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

void build(int nod,int p,int u){
    if(p==u){
        fin >> Arb[nod];
        return;
    }

    int mid=(p+u)>>1;

    build(2*nod,p,mid);
    build(2*nod+1,mid+1,u);

    Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}

void update(int nod,int p,int u,int a,int b){
    if(p==u){
        Arb[nod]=b;
        return;
    }

    int mid=(p+u)>>1;

    if(a<=mid)
        update(2*nod,p,mid,a,b);
    else
        update(2*nod+1,mid+1,u,a,b);

    Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}

void query(int nod,int p,int u,int a,int b){
    if(p>=a && u<=b){
        maxim=max(maxim,Arb[nod]);
        return;
    }

    int mid=(p+u)>>1;

    if(a<=mid)
        query(2*nod,p,mid,a,b);
    if(b>mid)
        query(2*nod+1,mid+1,u,a,b);

}

int main(){

    fin >> N >> Q;

    build(1,1,N);

    while(Q--){

        fin >> o >> a >> b;

        if(o==1)
            update(1,1,N,a,b);
        else{
            maxim = 0;
            query(1,1,N,a,b);
            fout << maxim << "\n";
        }

    }

}