Cod sursa(job #2129484)

Utilizator CriogeniXBociat Daniel Tiberiu CriogeniX Data 12 februarie 2018 21:00:48
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,x,y,tip,Max,ind,val,start,fin,MaxArb[4*100001+100];
void Update(int nod,int stanga,int dreapta){
    if(stanga==dreapta){
        MaxArb[nod]=val;
        return;
    }
    int mij=(stanga+dreapta)/2;
    if(ind<=mij)Update(2*nod,stanga,mij);
    else Update(2*nod+1,mij+1,dreapta);
    MaxArb[nod]=max(MaxArb[2*nod],MaxArb[2*nod+1]);
}
void Query(int nod,int stanga,int dreapta){
    if(start<=stanga&&dreapta<=fin){
        Max=max(Max,MaxArb[nod]);
        return;
    }
    int mij=(stanga+dreapta)/2;
    if(start<=mij)Query(2*nod,stanga,mij);
    if(mij<fin)Query(2*nod+1,mij+1,dreapta);
}
int main()
{
    f>>N>>M;
    for(int i=1;i<=N;++i){
        f>>x;
        ind=i,val=x;
        Update(1,1,N);
    }
    for(int i=1;i<=M;++i){
        f>>tip>>x>>y;
        if(tip==0){
            Max=-1;
            start=x,fin=y;
            Query(1,1,N);
            g<<Max<<'\n';
        }else{
            ind=x,val=y;
            Update(1,1,N);
        }
    }
    return 0;
}