Pagini recente » Cod sursa (job #1105285) | Cod sursa (job #2270008) | Cod sursa (job #1258568) | Cod sursa (job #2785178) | Cod sursa (job #2909938)
#include <iostream>
#include <vector>
#include <algorithm>
#include <fstream>
using namespace std;
struct segtree{
vector<int> seg;
int N;
segtree(int M){
N = M;
seg.resize(2*N);
}
void update(int k, int x){
k += N;
seg[k] = x;
while(k /= 2){
seg[k] = max(seg[2*k],seg[2*k+1]);
}
}
int query(int l, int r){
l += N; r += N;
int ret = 0;
while(l <= r){
if(l&1){
ret = max(ret,seg[l]);
++l;
}
if(!(r&1)){
ret = max(ret, seg[r]);
--r;
}
l /= 2; r /= 2;
}
return ret;
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
ifstream cin("arbint.in");
ofstream cout("arbint.out");
int n, q;
cin >> n >> q;
segtree st(n);
for(int i = 0; i < n; i++){
int x;
cin >> x;
st.update(i, x);
}
while (q--) {
int t;
cin >> t;
if (t == 1) {
int i, val;
cin >> i >> val;
st.update(i-1, val);
} else {
int l, r;
cin >> l >> r;
cout << st.query(l-1, r-1) << endl;
}
}
}