Pagini recente » Cod sursa (job #554711) | Cod sursa (job #2757117) | Cod sursa (job #742429) | Cod sursa (job #801941) | Cod sursa (job #1288827)
#include <fstream>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
const int nmax=100005;
int arb[4*nmax+66],n,val,op,be/*gin*/,en/*d*/,poz,maxim,t,i;
void Updt (int nod ,int stanga , int dreapta)
{
int mijloc;
if (stanga==dreapta)
{
arb[nod]=val;
return;
}
else
mijloc=(stanga+dreapta)/2;
if (poz<=mijloc) Updt(2*nod,stanga,mijloc);
else Updt(2*nod+1,mijloc+1,dreapta);
arb[nod]=max(arb[2*nod],arb[2*nod+1]);
}
void Quer (int nod, int stanga , int dreapta)
{
int mijloc;
if (be <= stanga && dreapta <= en)
{
if (arb[nod]>maxim) maxim=arb[nod];
return;
}
mijloc=(stanga+dreapta)/2;
if (be<=mijloc) Quer(2*nod,stanga,mijloc);
if (mijloc<en) Quer(2*nod+1,mijloc+1,dreapta);
}
int main()
{
f>>n>>t;
for (i=1;i<=n;i++)
{
f>>val;
poz=i;
Updt(1,1,n);
}
while (t--)
{
f>>op;
if (op==1)
{
f>>poz>>val;
Updt (1,1,n);
}
else
{
f>>be>>en;
maxim=0;
Quer(1,1,n);
g<<maxim<<'\n';
}
}
f.close();
g.close();
}