Pagini recente » Cod sursa (job #2296849) | Cod sursa (job #3197602) | Cod sursa (job #1607377) | Cod sursa (job #499760) | Cod sursa (job #2641433)
#include <bits/stdc++.h>
using namespace std;
ifstream f("arbint.in");
ofstream g("arbint.out");
int n,m,t,A,B,a[100010],aint[100010];
void start_up(int poz,int l,int r){
if(l==r){
aint[poz]=a[l];
return ;
}
int mi=(l+r)/2;
start_up(2*poz,l,mi);
start_up(2*poz+1,mi+1,r);
aint[poz]=max(aint[poz*2],aint[poz*2+1]);
return ;
}
int get_max(int poz,int l,int r){
if(r<A||B<l)return 0;
if(A<=l&&r<=B)return aint[poz];
int mi=(l+r)/2;
return max(get_max(poz*2,l,mi),get_max(poz*2+1,mi+1,r));
}
void upd(int poz,int l,int r){
if(r<A||A<l)return;
if(l==r){aint[poz]=a[l]=B;return;}
int mi=(l+r)/2;
upd(poz*2,l,mi);
upd(poz*2+1,mi+1,r);
aint[poz]=max(aint[poz*2],aint[poz*2+1]);
return ;
}
int main(){
f>>n>>m;
for(int i=1;i<=n;i++)
f>>a[i];
start_up(1,1,n);
for(int i=1;i<=m;i++){
f>>t>>A>>B;
if(t==0){
g<<get_max(1,1,n)<<'\n';
continue;
}
a[A]=B;
upd(1,1,n);
}
}