Pagini recente » Cod sursa (job #349672) | Cod sursa (job #3313383) | Cod sursa (job #1506550) | Cod sursa (job #1463639) | Cod sursa (job #3308997)
#include <iostream>
#include <queue>
#include <algorithm>
#include <set>
#include <map>
#include <stack>
#include <vector>
#include <string>
#include <deque>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <iomanip>
using namespace std;
#define ll long long
const int INF = -1e9;
int n, m;
vector<int> values;
struct SegmentTree{
int n; // number of Nodes
int size; // smaller power of 2
vector<int> seg;
SegmentTree(vector<int>& arr){
n = arr.size();
size = 1;
while (size < n) size<<=1;
seg.assign(2*size, INF);
// leaves
for (int i = 0; i < n; i++) seg[size + i] = arr[i];
// build recursively
for (int i = size - 1; i > 0; i--)
seg[i] = max(seg[2*i], seg[2*i + 1]);
}
int query(int node, int left, int right, int a, int b){
if (right < a || b < left) return INF;
if (a <= left && b >= right) return seg[node];
int mid = left + (right - left)/2;
return max(query(node*2, left, mid, a, b), query(node*2+1, mid +1, right, a , b));
}
void update(int index, int value){
index+= size;
seg[index] = value;
for (index/=2 ; index >= 1; index/=2)
seg[index] = max(seg[index*2], seg[index*2+1]);
}
};
void ReadData() {
cin >> n >> m;
int val = 0;
for (int i = 0; i < n; i++){
cin >> val;
values.push_back(val);
}
SegmentTree segTree(values);
int inst, a, b;
for (int i = 0; i < m; i++){
cin >> inst >> a >> b;
a--; b--;
if (inst == 0){
cout << segTree.query(1, 0, segTree.size-1, a, b) << " ";
} else {
segTree.update(a, b);
}
}
}
void Solve() {
// TODO: Implement problem solution here
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
freopen("arbint.in", "r", stdin);
freopen("arbint.out", "w", stdout);
int t = 1;
// cin >> t; // Uncomment for multiple test cases
while (t--) {
ReadData();
Solve();
}
return 0;
}