Pagini recente » Cod sursa (job #825754) | Cod sursa (job #824929) | Cod sursa (job #2908912) | Cod sursa (job #556200) | Cod sursa (job #775019)
Cod sursa(job #775019)
#include <fstream>
#define LE 100600
#define inf 1<<30
#define zero(X) ((X^(X-1))&X)
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int V[LE],A[LE],n,m,tip,aa,bb,j;
inline int query(int a,int b)
{
int rez=-inf;
int i;
for(i=b;i>=a;)
{
if (i-zero(i)+1>=a)
rez=max(rez,A[i]),i-=zero(i);
else rez=max(rez,V[i]),--i;
}
return rez;
}
inline void update(int p,int val)
{
V[p]=val; int i;
for(i=p;i<=n;i+=zero(i))
{
A[i]=max(query(i-zero(i)+1,p-1),query(p+1,i));
A[i]=max(A[i],val);
A[i]=max(A[i],V[i]);
}
}
int main()
{
f>>n>>m;
for(j=1;j<=n;++j)
{
f>>V[j];
update(j,V[j]);
}
for(j=1;j<=m;++j)
{
f>>tip>>aa>>bb;
if (tip==0) g<<query(aa,bb)<<'\n';
else update(aa,bb);
}
f.close();g.close();
return 0;
}