Pagini recente » Cod sursa (job #161367) | Cod sursa (job #944227) | Cod sursa (job #427065) | Cod sursa (job #2440604) | Cod sursa (job #2949490)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("arbint.in");
ofstream fout("arbint.out");
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(){
fin >> n >> m;
for(int i=1; i<=n; i++){
int x;
fin >> x;
update(i, x);
}
while(m--){
int c, a , b;
fin >> c >> a >> b;
if(c==0){
fout << query(a, b) << '\n';
}else{
update(a, b);
}
}
}