Pagini recente » Cod sursa (job #123221) | Cod sursa (job #737061) | Cod sursa (job #796010) | Cod sursa (job #3038688) | Cod sursa (job #3128270)
#include <bits/stdc++.h>
using namespace std;
using i64 = int64_t;
const i64 INF = INT_MAX;
class segtree{
private:
i64 len;
vector<i64> data;
i64 next_pow2(i64 n){
i64 res = 1;
while(res < n){
res *= 2;
}
res *= 2;
return res;
}
public:
segtree(i64 n){
len = next_pow2(n);
data.assign(len, 0);
}
void set_value(i64 idx, i64 x){
idx += len/2;
data[idx] = x;
idx /= 2;
while(idx > 0){
data[idx] = max(data[idx * 2], data[idx * 2 + 1]);
idx /= 2;
}
}
i64 queryy(i64 l, i64 r, i64 cl, i64 cr, i64 idx){
if(cl == l && cr == r){
return data[idx];
}
i64 m = (cl+ cr) / 2;
if(m >= r){
return queryy(l, r, cl, m, idx * 2);
}else if(m < l){
return queryy(l, r, m + 1, cr, idx * 2 + 1);
}else{
return max(queryy(l, m, cl, m, idx * 2), queryy(m + 1, r, m + 1, cr, idx * 2 + 1));
}
}
i64 query(i64 l, i64 r){
return queryy(l, r, 0, len / 2 - 1, 1);
}
};
int main()
{
i64 n, m;
cin >> n >> m;
segtree st(n);
for(i64 i = 0; i < n; i++){
i64 x;
cin >> x;
st.set_value(i, x);
}
i64 t, a, b;
for(i64 i = 0; i < m; i++){
cin >> t >> a >> b;
if(!t){
a--;
b--;
cout << st.query(a, b) << endl;
}else{
a--;
st.set_value(a, b);
}
}
return 0;
}