Pagini recente » Cod sursa (job #440971) | Cod sursa (job #2107964) | Cod sursa (job #2854354) | Cod sursa (job #1152489) | Cod sursa (job #856795)
Cod sursa(job #856795)
#include<fstream>
using namespace std;
int *arb,maxim,pozitie,a,b,n,valoare;
void update (int nod,int stanga,int dreapta)
{
if (stanga == dreapta)
{
arb[nod] = valoare;
return;
}
int mijloc = (stanga + dreapta) >> 1,nod_sub=nod << 1;
if (pozitie <= mijloc)
update(nod_sub,stanga,mijloc);
else
update(nod_sub+1,mijloc+1,dreapta);
arb[nod] = arb[nod_sub];
if(arb[nod] < arb[nod_sub+1])
arb[nod] = arb[nod_sub+1];
}
void query (int nod,int stanga,int dreapta)
{
if ((a <= stanga) && (dreapta <= b))
{
if(maxim < arb[nod])
maxim = arb[nod];
return;
}
int mijloc = (stanga + dreapta) >> 1,nod_sub = nod << 1;
if (a <= mijloc)
query(nod_sub,stanga,mijloc);
if (mijloc < b)
query(nod_sub+1,mijloc+1,dreapta);
}
int main()
{
ifstream f("arbint.in");
int m;
f >> n >> m;
arb = new int[(n << 2) + 1];
int i;
for (i=1;i<=n;++i)
{
f >> valoare;
pozitie = i;
update(1,1,n);
}
int operatie;
ofstream g("arbint.out");
for (i=1;i<=m;++i)
{
f >> operatie >> a >> b;
if (operatie == 0)
{
maxim = -1;
query(1,1,n);
g<<maxim<<endl;
}
else
{
pozitie = a;
valoare = b;
update(1,1,n);
}
}
f.close();
g.close();
delete []arb;
return 0;
}