Pagini recente » Cod sursa (job #2265669) | Cod sursa (job #2281962) | Cod sursa (job #2946781) | Cod sursa (job #2375440) | Cod sursa (job #2419297)
#include <bits/stdc++.h>
#define debugd(x) printf(#x" = %d\n",x)
#define debugs(x) printf(#x" = %s\n",x)
#define debugc(x) printf(#x" = %c\n",x)
#define tab printf("\t")
#define end printf("\n")
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
#define MAX 300005
int node[MAX];
int n,m,s=1;
int q,a,b;
inline pos_ith_node(int i){return i-s+1;}
inline node_ith_pos(int a){return a+s-1;}
inline int left(int x){return 2*x;}
inline int right(int x){return 2*x+1;}
inline int parent(int x){return x/2;}
update(int pos,int val){
int i=node_ith_pos(pos);
int aux=node[i];
node[i]=val;
bool ok=1;
while(i>1){
if(node[parent(i)]<node[i]) node[parent(i)]=node[i],i=parent(i);
else
i=parent(i),node[i]=max(node[left(i)],node[right(i)]);
}
}
int querry(int l,int r,int ll=1,int rr=s,int nd=1){
if(l==ll && r==rr) return node[nd];
int mid=(ll+rr)/2;
if(mid>=r) return querry(l,r,ll,mid,left(nd));
if(mid<l) return querry(l,r,mid+1,rr,right(nd));
return max(querry(l,mid,ll,mid,left(nd)),querry(mid+1,r,mid+1,rr,right(nd)));
}
int main()
{
fin>>n>>m;
int nr=n;
while(nr){nr/=2;s*=2;}
for(int i=1;i<=n;i++) fin>>node[node_ith_pos(i)];
for(int i=s-1;i>0;i--) node[i]=max(node[left(i)],node[right(i)]);
//for(int i=1;i<2*s;i++) cout<<node[i]<<' ';end;
for(int i=0;i<m;i++){
fin>>q>>a>>b;
// debugd(a);
// debugd(b);
// debugd(q);
// end;
if(q==1) update(a,b);
if(q==0) fout<<querry(a,b)<<'\n';
// int j=2;
// for(int i=1;i<2*s;i++) {cout<<node[i]<<' ';if(i==j-1){end;j=j*2;}} end;
}
//for(int i=1;i<2*s;i++) cout<<node[i]<<' ';end;
return 0;
}