Pagini recente » Cod sursa (job #375628) | Cod sursa (job #979997) | Borderou de evaluare (job #156717) | Cod sursa (job #242928) | Cod sursa (job #658014)
Cod sursa(job #658014)
#include<fstream>
#include<iostream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
typedef struct nod{int info,st_int,dr_int;nod *st,*dr;}arbore;
int vector[1000],maxim=-1;
inline int MAXIM(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int creare_rsd(arbore *&r,int st_int,int dr_int)
{
int mij=(dr_int+st_int)/2;
r=new arbore;
r->st_int=st_int;
r->dr_int=dr_int;
if(st_int!=dr_int)
{
r->info=MAXIM(creare_rsd(r->st,st_int,mij),creare_rsd(r->dr,mij+1,dr_int));
}
else
{
r->info=vector[st_int];
return r->info;
}
}
void afisare_interval(arbore *&r,int st_int,int dr_int)
{
int mij=(r->st_int+r->dr_int)/2;
if(r->st_int>=st_int&&r->dr_int<=dr_int)
{
if(maxim<r->info)
maxim=r->info;
}
else
{
if(mij<dr_int)
afisare_interval(r->dr,st_int,dr_int);
if(st_int<=mij)
afisare_interval(r->st,st_int,dr_int);
}
}
int main()
{
int M,i,N,st_int,dr_int,operatie,poz,val;
arbore *r;
f>>N>>M;
for(i=1;i<=N;i++)
f>>vector[i];
r=new arbore;
r->st_int=1;
r->dr_int=N;
creare_rsd(r,1,N);
for(i=1;i<=M;i++)
{
f>>operatie;
if(operatie)
{
f>>poz>>val;
vector[poz]=val;
creare_rsd(r,1,N);
}
else
if(operatie==0)
{
f>>st_int>>dr_int;
afisare_interval(r,st_int,dr_int);
g<<maxim<<endl;
maxim=-1;
}
}
return 0;
}