Pagini recente » Cod sursa (job #2146162) | Cod sursa (job #1898487) | Cod sursa (job #876914) | Cod sursa (job #1213468) | Cod sursa (job #751114)
Cod sursa(job #751114)
#include <iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,q,i,p,A,B,C,v[1<<18],getmax(int,int,int);
int main()
{
freopen("arbint.in","r",stdin);
freopen("arbint.out","w",stdout);
cin>>n>>q;
for(p=1;;p*=2)if(p>=n)break;
for(i=1;i<=n;i++)scanf("%d",&v[p+i-1]);
for(i=p-1;i>=1;i--)v[i]=max(v[2*i],v[2*i+1]);
for(;q;q--)
{
cin>>C>>A>>B;
if(C==0)
{
cout<<getmax(1,1,p)<<"\n";
//fprintf(stderr,"%d\n",getmax(1,1,p));
}
else
{
A+=p-1;v[A]=B;
for(A/=2;A>=1;A/=2)
v[A]=max(v[2*A],v[2*A+1]);
}
}
return 0;
}
int getmax(int N,int S,int D)
{
if(D<A||S>B)return 0;
if(A<=S&&D<=B)return v[N];
return max(getmax(2*N,S,(S+D)/2),getmax(2*N+1,(S+D)/2+1,D));
}