Pagini recente » Cod sursa (job #3357635) | Cod sursa (job #2656917) | Cod sursa (job #1704418) | Cod sursa (job #1126687) | Cod sursa (job #3327197)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n,q,A[100005];
int aint[200005];
void build()
{
for(int i=0;i<n;i++)
aint[n+i]=A[i+1];
for(int i=n-1;i>=1;i--)
aint[i]=max(aint[2*i],aint[2*i+1]);
}
int query(int l,int r)
{
int ans=0;
for(l+=n-1,r+=n;l<r;l>>=1,r>>=1)
{
if(l&1) ans=max(ans,aint[l++]);
if(r&1) ans=max(ans,aint[--r]);
}
return ans;
}
void update(int x,int v)
{
x+=n-1;
aint[x]=v;
for(x>>=1;x;x>>=1)
{
aint[x]=max(aint[2*x],aint[2*x+1]);
}
}
int main()
{
cin>>n>>q;
for(int i=1;i<=n;i++)
cin>>A[i];
build();
int op,a,b;
while(q--)
{
cin>>op>>a>>b;
if(op==0)
cout<<query(a,b)<<"\n";
else
update(a,b);
}
return 0;
}