Pagini recente » Cod sursa (job #456269) | Cod sursa (job #3276436) | Cod sursa (job #163994) | Cod sursa (job #2909109) | Cod sursa (job #2695885)
#include <fstream>
using namespace std;
fstream cin("arbint.in");
ofstream cout("arbint.out");
int n,m, poz, val, x, a, b, A, B;
int t[100005];
void actual(int p, int st, int dr){
if(st==dr){
t[p]=val;
return;
}
int m=(st+dr)/2;
if(poz<=m){
actual(2*p, st, m);
}
else{
actual(2*p+1, m+1, dr);
}
t[p]=max(t[2*p], t[2*p+1]);
}
int maxim(int p, int st, int dr){
if(a<=st && dr<=b){
return t[p];
}
int m=(st+dr)/2;
int maxst=-1;
int maxdr=-1;
if(a<=m){
maxst=maxim(2*p, st, m);
}
if(b>m){
maxdr=maxim(2*p+1, m+1, dr);
}
return max(maxst, maxdr);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++){
cin>>x;
val=x;
poz=i;
actual(1,1,n);
}
for(int i=1; i<=m; i++){
cin>>x>>A>>B;
if(x==0){
a=A;
b=B;
cout<<maxim(1,1,n)<<'\n';
}
if(x==1){
poz=A;
val=b;
actual(1,1,n);
}
}
return 0;
}