Cod sursa(job #2105944)

Utilizator Andrei243Nitu Mandel Andrei Andrei243 Data 14 ianuarie 2018 17:44:30
Problema Arbori de intervale Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream in("arbint.in");
ofstream out("arbint.out");
int ARB[400050];

int maximact;

int maxim(int a,int b){
if(a>b)return a;
return b;
}

void update(int nod,int st,int dr,int pos,int val){
if (st==dr){
ARB[nod]=val;
return;
}

int div=(st+dr)/2;


if(div>=pos)update(2*nod,st,div,pos,val);
     else update(2*nod+1,div+1,dr,pos,val);

ARB[nod]=maxim(ARB[nod*2],ARB[nod*2+1]);

}

void query(int nod,int st,int dr,int l,int r){

if(l<=st&&r>=dr){
if(maximact<ARB[nod])maximact=ARB[nod];
return;
}
int div=(st+dr)/2;

if(l<=div) query(nod*2,st,div,l,r);
if(div<r) query(nod*2+1,div+1,dr,l,r);

}

int main()
{int nrnumere,nroperatii;
in>>nrnumere>>nroperatii;
int op,arg1,arg2;
for(int i=1;i<=nrnumere;i++){
in>>arg1;
update(1,1,nrnumere,i,arg1);
}

for(int i=0;i<nroperatii;i++){
in>>op>>arg1>>arg2;
if(op==0){
    maximact=-1;
    query(1,1,nrnumere,arg1,arg2);
out<<maximact<<"\n";
}
else {
update(1,1,nrnumere,arg1,arg2);
}


}



    return 0;
}