Pagini recente » Cod sursa (job #547738) | Cod sursa (job #1163604)
#include <fstream>
#define maxx(a,b) ((a>b)?a:b)
#define dim 100001
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,i,x,pos,val,xx,a,b,st,fin,maxim,arb[4*dim+66];
void update(int nod, int left, int right)
{
if (left==right)
{
arb[nod]=val;
return;
}
int dif=(left+right)/2;
if (pos<=dif) update(2*nod,left,dif);
else update(2*nod+1,dif+1,right);
arb[nod]=maxx(arb[2*nod],arb[2*nod+1]);
}
void query(int nod, int left, int right)
{
if (st<=left && right<=fin)
{
if (maxim<arb[nod]) maxim=arb[nod];
return;
}
int div=(left+right)/2;
if (st<=div) query(2*nod,left,div);
if (div<fin) query(2*nod+1,div+1,right);
}
int main ()
{
f>>n>>m;
for (i=1;i<=n;i++)
{
f>>xx;
pos=i;
val=xx;
update(1,1,n);
}
for (i=1;i<=m;i++)
{
f>>x>>a>>b;
if (x==0)
{
maxim=-1;
st=a;
fin=b;
query(1,1,n);
g<<maxim<<"\n";
}
else
{
pos=a;
val=b;
update(1,1,n);
}
}
}