Cod sursa(job #2481565)

Utilizator igorsmolovIgor Smolov igorsmolov Data 27 octombrie 2019 08:49:03
Problema Arbori de intervale Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int n,x,a,b,st,dr,Maxarb[400004],Max,start,finish,nod,val,pos,m;
void querry(int st ,int dr ,int nod){
if(start<=st&&dr<=finish){
    if(Max<Maxarb[nod]) Max=Maxarb[nod];
   /// cout<<Max<<endl;
    return;
}
int m=(st+dr)/2;
if(start<=m) querry(st,m,nod*2);
if(m<finish) querry(m+1,dr,nod*2+1);
}
void update(int st,int dr ,int nod){
if(st==dr){
    Maxarb[nod]=val;
    return;
}
int m=(st+dr)/2;
if(pos<=m) update(st,m,2*nod);
else  update(m+1,dr,2*nod+1);
Maxarb[nod]=max(Maxarb[2*nod],Maxarb[2*nod+1]);
}
int main()
{
    in>>n >>m;
    for(int i=1;i<=n;i++){
        in>>x;
        pos=i;
        val=x;
        update(1,n,1);
    }
    for(int i=1;i<=n;i++){
        in>>x >>a >>b;
        if(x==0){
         Max=-1;
         start=a;
         finish=b;
         querry(1,n,1);
            cout<<Max;
        }
        else {
            pos=a;
            val=b;
            update(1,n,1);
        }
    }
    return 0;

}