Pagini recente » Cod sursa (job #947972) | Cod sursa (job #273798) | Cod sursa (job #2643285) | Cod sursa (job #2692528) | Cod sursa (job #2949489)
#include <bits/stdc++.h>
using namespace std;
int n, m;
struct Node{
int mx;
} a[400001];
void update(int pos, int val, int node=1, int st=1, int dr=n){
if(st==dr){
a[node].mx = val;
return;
}
int mid=(st+dr)/2;
if(pos<=mid){
update(pos, val, node*2, st, mid);
}else{
update(pos, val, node*2+1, mid+1, dr);
}
a[node].mx = max(a[node*2].mx, a[node*2+1].mx);
}
int query(int x, int y, int node=1, int st=1, int dr=n){
if(x>dr || y<st) return 0;
if(x<=st && y>=dr){
return a[node].mx;
}
int mid=(st+dr)/2;
int Q_st=query(x, y, node*2, st, mid);
int Q_dr=query(x, y, node*2+1, mid+1, dr);
return max(Q_st, Q_dr);
}
int main(){
cin >> n >> m;
for(int i=1; i<=n; i++){
int x;
cin >> x;
update(i, x);
}
while(m--){
int c, a , b;
cin >> c >> a >> b;
if(c==0){
cout << query(a, b) << '\n';
}else{
update(a, b);
}
}
}