Pagini recente » Cod sursa (job #1560698) | Cod sursa (job #1544987) | Cod sursa (job #2203344) | Cod sursa (job #1714379) | Cod sursa (job #1016549)
#include <fstream>
#include <algorithm>
#define MaxN 100005
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int N, M, arb[4*MaxN+100], tip, x, y, pos, val, maxim, start, finish;
inline void update(int nod, int left, int right)
{
if (left==right)
{
arb[nod]=val; return;
}
else
{
int mij=(left+right)/2;
if (pos<=mij) update(nod<<1, left, mij);
else update((nod<<1)+1, mij+1, right);
if (arb[nod<<1]>arb[(nod<<1)+1]) arb[nod]=arb[nod<<1];
else arb[nod]=arb[(nod<<1)+1];
}
}
inline void query(int nod, int left, int right)
{
if (start<=left && right<=finish)
{
if (maxim<arb[nod])
maxim=arb[nod];
return;
}
else
{
int mij=(left+right)/2;
if (x<=mij) query(nod<<1, left, mij);
if (mij<finish) query((nod<<1)+1, mij+1, right);
}
}
int main()
{
f>>N>>M;
for (int i=1; i<=N; ++i)
{
f>>val; pos=i;
update(1, 1, N);
}
for (int i=1; i<=M; ++i)
{
f>>tip>>x>>y;
if (tip)
{
pos=x; val=y;
update(1, 1, N);
}
else
{
maxim=-1;
start=x; finish=y;
query(1, 1, N);
g<<maxim<<'\n';
}
}
}