Pagini recente » Cod sursa (job #3214870) | Cod sursa (job #2852437) | Cod sursa (job #3242216) | Cod sursa (job #2555042) | Cod sursa (job #828135)
Cod sursa(job #828135)
#include<fstream>
#define lmax 300000
using namespace std;
int arbin[lmax];
int start,finish,val,poz,maxim;
int max(int a,int b){
if(a>b)return a;
return b;}
void actualizare(int nod, int st, int dr){
if(st==dr)
arbin[nod]=val;
else{
int div=(st+dr)/2;
if(poz<=div)actualizare(2*nod,st,div);
else actualizare(2*nod+1,div+1,dr);
arbin[nod]=max(arbin[2*nod],arbin[2*nod+1]);//astfel se obtine maximul din fiecare interval
}
}
void interogare(int nod, int st, int dr){
if(start<=st && dr<=finish)
{if(maxim<=arbin[nod])maxim=arbin[nod];}
else{
int div=(st+dr)/2;
if(start<=div)interogare(2*nod,st,div);
if(div<finish)interogare(2*nod+1,div+1,dr);
}
}
int main(){
int a,b,x,i,n,m;
ifstream f("arbint.in");
ofstream g("arbint.out");
f>>n>>m;
for(i=1;i<=n;i++){
f>>x;
poz=i;
val=x;
actualizare(1,1,n);
}
for(i=1;i<=m;i++){
f>>x>>a>>b;
if(x==0){
maxim=-1;
start=a;
finish=b;
interogare(1,1,n);
g<<maxim<<'\n';
}
else{poz=a;
val=b;
actualizare(1,1,n);
}
}
}