Pagini recente » Cod sursa (job #1320201) | Cod sursa (job #2016812) | Cod sursa (job #280068) | Cod sursa (job #413851) | Cod sursa (job #705968)
Cod sursa(job #705968)
#include <fstream>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define dim 100001
int n,m;
int maxarb[4*dim+66];
int start, finish, val, pos, maxim;
inline void Update(int nod, int left, int right)
{int div;
if (left == right)
{ maxarb[nod] = val;
return;
}
div = (left+right)/2;
if (pos<=div)
Update(2*nod,left,div);
else
Update(2*nod+1,div+1,right);
maxarb[nod] = max(maxarb[2*nod],maxarb[2*nod+1]);
}
inline void Query(int nod,int left,int right)
{int div;
if (start <= left && right <= finish)
{ if (maxim < maxarb[nod])
maxim = maxarb[nod];
return;
}
div = (left+right)/2;
if (start <= div)
Query(2*nod,left,div);
if (div < finish)
Query(2*nod+1,div+1,right);
}
int main()
{int aux,a,b,x,i;
fin >> n >> m;
for (i=1;i<=n;i++)
{ fin >> aux;
pos = i;
val = aux;
Update(1,1,n);
}
for (i=1;i<=m;i++)
{ fin >> x >> a >> b;
if (!x)
{ maxim = -1;
start = a;
finish = b;
Query(1,1,n);
fout << maxim << '\n';
}
else
{ pos = a;
val = b;
Update(1,1,n);
}
}
}