Pagini recente » Cod sursa (job #141711) | Cod sursa (job #110214) | Cod sursa (job #313778) | Cod sursa (job #706217) | Cod sursa (job #793795)
Cod sursa(job #793795)
#include<cstdio>
using namespace std;
#define NMAX 100001
long a[4*NMAX+66],val,max=-1;
int p,s,f;
bool t;
inline int maxim(int a,int b)
{
return a < b ? b : a;
}
void update(int nod ,int left,int right)
{
if( left == right)
{
a[nod]=val;
return;
}
int div=(left+right)/2;
if(p <= div)update(2*nod,left,div);
else
update(2*nod+1,div+1,right);
a[nod]=maxim( a[2*nod] , a[2*nod+1] );
}
void solve(int nod,int l,int r)
{
if(s <= l && r <= f)
{
if(max < a[nod] )max=a[nod];
return;
}
int div=(r+l)/2;
if(s<=div)solve(2*nod , l , div);
if(div<f)solve((2*nod)+1 , (div+1) , r);
}
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
unsigned int n,m;
scanf("%d %d",&n,&m);
for(int i=1;i<=n;++i)
{
scanf("%d",&val);
p=i;
update(1,1,n);
}
for(int i=1;i<=m;++i)
{
scanf("%d %d %d",&t,&p,&val);
if(t==1)
{
update(1,1,n);
}
else
{
max=-1;
s=p;//start
f=val;//finish
solve(1,1,n);
printf("%d\n",max);
}
}
return 1;
}