Pagini recente » Cod sursa (job #2209612) | Cod sursa (job #3183631) | Cod sursa (job #1717527) | Cod sursa (job #1872525) | Cod sursa (job #2335925)
#include <iostream>
#include <fstream>
#include <assert.h>
using namespace std;
#define dim 1000001
long int MaxArb[4*dim+66],n,m,val,poz,x,st,fn,maxim;
ifstream fi("arbint.in");
ofstream fo("arbint.out");
long int Maxim(long int a, long int b)
{
if(a>b)
return a;
else
return b;
}
void update(long int nod, long int left, long int right)
{
if(left==right)
{
MaxArb[nod]=val;
return;
}
long int div=(left+right)/2;
if(poz<=div)
update(2*nod,left,div);
else
update(2*nod+1,div+1,right);
MaxArb[nod]=Maxim(MaxArb[2*nod],MaxArb[2*nod+1]);
}
void query(long int nod, long int left, long int right)
{
if(st<=left && right<=fn)
{
if(maxim<MaxArb[nod])
maxim=MaxArb[nod];
return;
}
long int div=(left+right)/2;
if(st <= div)
query(2*nod,left,div);
if(div < fn)
query(2*nod+1,div+1,right);
}
int main()
{
fi>>n>>m;
for(long int i=1;i<=n;i++)
{
poz=i;
fi>>val;
update(1,1,n);
}
for(long int i=1;i<=m;i++)
{
fi>>x;
if(x==0)
{
fi>>st;
fi>>fn;
maxim= -1;
query(1,1,n);
fo<<maxim<<'\n';
}
else
{
fi>>poz;
fi>>val;
update(1,1,n);
}
}
return 0;
}