Pagini recente » Cod sursa (job #1465322) | Cod sursa (job #1781695) | Cod sursa (job #1791797) | Cod sursa (job #1106745) | Cod sursa (job #2310426)
#include <bits/stdc++.h>
#define Dim 1000008
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
long Arb[2*Dim+1],N,M,V[Dim],a,b,maxim,lop;
int op;
void Update(int st,int dr,int nod)
{
if(st==dr)
{
Arb[nod]=V[st];
return;
}
int mij=(st+dr)/2;
Update(st,mij,2*nod);
Update(mij+1,dr,2*nod+1);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void Update1(int st,int dr,int nod)
{
if(st==dr&&dr==a)
{
Arb[nod]=b;
return;
}
int mij=(st+dr)/2;
if(a<=mij)
Update1(st,mij,2*nod);
else
Update1(mij+1,dr,2*nod+1);
Arb[nod]=max(Arb[2*nod],Arb[2*nod+1]);
}
void Query(int st,int dr,int nod)
{
if(st>=a&&dr<=b)
{
maxim=max(maxim,Arb[nod]);
if(dr==b)
{
g<<maxim<<'\n';
return;
}
}
else
{
int mij=(st+dr)/2;
if(a<=mij)
Query(st,mij,2*nod);
if(b>mij)
Query(mij+1,dr,2*nod+1);
}
}
int main()
{
f>>N>>M;
for(int i=1;i<=N;i++) f>>V[i];
Update(1,N,1);
for(int i=1;i<=M;i++)
{ lop=i;
f>>op;
if(op)
{
f>>a>>b;
Update1(1,N,1);
}else
{
maxim=0;
f>>a>>b;
Query(1,N,1);
}
}
return 0;
}