Cod sursa(job #1675051)

Utilizator SirStevensIonut Morosan SirStevens Data 5 aprilie 2016 08:18:23
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;

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

#define Nmax 100000
#define inf -1223443545
int n,m,a,b,c,Max[4*Nmax],left,right,finish,Pos,Val,start,res,x;

void Update(int nod, int left, int right){

    if(left == right){
        Max[nod]=Val;
        return;
    }

    int mij = (left + right)/2;
    if(Pos <= mij)Update(2*nod,left,mij);
    else Update(2*nod+1,mij+1,right);

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

}

void Querry(int nod, int left, int right){

    if(start<=left && finish >= right){
        res=max(res, Max[nod]);
        return;
    }
    int mij=(left+right)/2;
    if(start <= mij) Querry(2*nod,left,mij);
    if(finish>mij)  Querry(2*nod+1,mij+1,right);
}

int main(){

    in>>n>>m;
    for(int i=1;i<=n;i++){
        in>>x;
        Pos=i;Val=x;
        Update(1,1,n);
    }
    for(int i=1;i<=m;i++){
        in>>c>>a>>b;
        if(c==0){

            res=inf;
            start=a;finish=b;
            Querry(1,1,n);
            out<<res<<'\n';

        }
        else
        {
            Pos=a;Val=b;
            Update(1,1,n);
        }

    }
    return 0;

}