Pagini recente » Cod sursa (job #1867280) | Cod sursa (job #1643238) | Cod sursa (job #344955) | Cod sursa (job #827867) | Cod sursa (job #1016538)
#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;
void update(int nod, int left, int right)
{
if (left==right)
{
arb[nod]=val; return;
}
int mij=(left+right)/2;
if (pos<=mij) update(2*nod, left, mij);
else update(2*nod+1, mij+1, right);
arb[nod]=max(arb[2*nod], arb[2*nod+1]);
}
void query(int nod, int left, int right)
{
if (start<=left && right<=finish)
{
if (maxim<arb[nod])
maxim=arb[nod];
return;
}
int mij=(left+right)/2;
if (x<=mij) query(2*nod, left, mij);
if (mij<finish) query(2*nod+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, x, y);
g<<maxim<<'\n';
}
}
}