Pagini recente » Cod sursa (job #954682) | Cod sursa (job #2902828) | Cod sursa (job #1423947) | Cod sursa (job #1146336) | Cod sursa (job #1016531)
#include <fstream>
#define Nmax 100099
#define Maxim(a,b) (a>b)? a : b;
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N,M,Arb[4*Nmax+99],start,finish,val,poz,Max;
void Update(int nod, int left, int right)
{
if (left==right)
{
Arb[nod]=val;
return;
}
int middle=(left+right)/2;
if (poz<=middle)Update(2*nod,left,middle);
else Update(2*nod+1,middle+1,right);
Arb[nod]=Maxim(Arb[2*nod],Arb[2*nod+1]);
}
void Query(int nod, int left, int right)
{
if ( start <= left && right <= finish )
{
if (Max<Arb[nod])Max=Arb[nod];
return;
}
int middle=(left+right)/2;
if (start<=middle)Query(2*nod,left,middle);
if (middle<finish)Query(2*nod+1,middle+1,right);
}
inline void ReadInput()
{
f>>N>>M;
for (int i=1;i<=N;++i)
{
f>>val; poz=i;
Update(1,1,N);
}
}
inline void Solve()
{
for (int i =1;i<=M;++i)
{
int tip,a,b;
f>>tip>>a>>b;
if (!tip)
{
Max=-1;
start=a,finish=b;
Query(1,1,N);
g<<Max<<'\n';
}
else
{
poz=a,val=b;
Update(1,1,N);
}
}
}
int main()
{
ReadInput();
Solve();
f.close();g.close();
return 0;
}