Pagini recente » Cod sursa (job #1522534) | Cod sursa (job #2823354)
#include <bits/stdc++.h>
#define in "arbint.in"
#define out "arbint.out"
using namespace std;
const int nmax=1e5;
int mx[4*nmax+50];
int start ,finish,val,pos,ans;
static void update(int nod , int left ,int right ){
if( left == right ){
mx[nod]=val;
return;
}
int mid=(left+right)/2;
if(pos<=mid)update(2*nod,left,mid);
else update(2*nod+1,mid+1,right);
mx[nod]=max(mx[2*nod],mx[2*nod+1]);
}
static void query (int nod,int left ,int right)
{
if(start<=left && right <= finish)
{
ans=max(ans,mx[nod]);
return;
}
int mid=(left+right)/2;
if(start<=mid)query(2*nod,left,mid);
if(mid<finish) query(2*nod+1,mid+1,right);
}
int main()
{
freopen(in,"r",stdin);
freopen(out,"w",stdout);
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n ,m;
cin>>n>>m;
for(int i=1,x;i<=n;++i){
cin>>x;
pos=i,val=x;
update(1,1,n);
}
for(int i=1,x,a,b;i<=m;++i){
cin>>x>>a>>b;
if(x==0){
ans=-1;
start=a,finish=b;
query(1,1,n);
cout<<ans<<"\n";
}
else {
pos=a,val=b;
update(1,1,n);
}
}
}