Pagini recente » Cod sursa (job #2687709) | Cod sursa (job #676552) | Cod sursa (job #2880942) | Cod sursa (job #1482631) | Cod sursa (job #1852637)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int nmax=100005;
int arb[44*nmax+66],poz,val,bg,en,maxim_actual,n,t;
void Update (int nod ,int stanga , int dreapta)
{
int mijloc;
if (stanga==dreapta)
{
arb[nod]=val;
return;
}
mijloc=(stanga+dreapta)/2;
if (poz<=mijloc) Update(2*nod,stanga,mijloc);
else Update(2*nod+1,mijloc+1,dreapta);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void Query (int nod , int stanga , int dreapta)
{
int mijloc;
if (bg<=stanga && dreapta<=en)
{
maxim_actual=max(maxim_actual,arb[nod]);
return;
}
mijloc=(stanga+dreapta)/2;
if (bg<=mijloc) Query(2*nod,stanga,mijloc);
if (mijloc<en) Query(2*nod+1,mijloc+1,dreapta);
}
int main()
{
f>>n>>t;
int op,i;
for (i=1;i<=n;i++)
{
f>>val;
poz=i;
Update(1,1,n);
}
while (t--)
{
f>>op;
if (op)
{
f>>poz>>val;
Update(1,1,n);
}
else
{
f>>bg>>en;
maxim_actual=0;
Query(1,1,n);
g<<maxim_actual<<'\n';
}
}
return 0;
}