Pagini recente » Cod sursa (job #187963) | Cod sursa (job #483074) | Cod sursa (job #1593537) | Cod sursa (job #989939) | Cod sursa (job #772538)
Cod sursa(job #772538)
#include<cstdio>
#include<algorithm>
using namespace std;
int tree[200010],n,m,n2,a,b,maximum;
void update()
{
tree[n2+a-1]=b;
int node;
for(node=(n2+a-1)/2;node>=1;node>>=1) tree[node]=max(tree[2*node],tree[2*node+1]);
}
void query(int node,int left,int right)
{
if(a<=left&&right<=b)
{
maximum=max(maximum,tree[node]);
}
else
{
int middle=left+(right-left)/2;
if(a<=middle) query(2*node,left,middle);
if(middle<b) query(2*node+1,middle+1,right);
}
}
int main()
{
int p,i;
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
scanf("%d%d",&n,&m);
for(n2=1;n2<n;n2<<=1);
for(i=n2;i<=n2+n-1;++i) scanf("%d",&tree[i]);
for(i=n2-1;i>=1;--i) tree[i]=max(tree[2*i],tree[2*i+1]);
for(;m;--m)
{
scanf("%d %d %d",&p,&a,&b);
if(p==1) update();
else {maximum=-1; query(1,1,n2); printf("%d\n",maximum);}
}
return 0;
}