Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int T = (1 << 21);
- int n;
- int tree[T];
- int arr[T];
- void build() {
- for (int i = 0; i < n; i++) {
- tree[i + n] = arr[i];
- }
- for (int i = n - 1; i >= 0; i--) {
- tree[i] = min(tree[i << 1], tree[i << 1 | 1]);
- }
- }
- void update(int pos, int val) {
- pos += n;
- tree[pos] = val;
- for (tree[pos] = val; pos > 1; pos >>= 1) {
- tree[pos >> 1] = min(tree[pos], tree[pos ^ 1]);
- }
- }
- int find_min(int ql, int qr) {
- int ans = numeric_limits<int>::max();
- ql += n;
- qr += n;
- while (ql < qr) {
- if (ql & 1) {
- ans = min(ans, tree[ql]);
- ql++;
- }
- if (qr & 1) {
- qr--;
- ans = min(ans, tree[qr]);
- }
- ql >>= 1;
- qr >>= 1;
- }
- return ans;
- }
- int main() {
- cin >> n;
- for (int i = 0; i < n; i++) {
- cin >> arr[i];
- }
- build();
- int q;
- cin >> q;
- while (q--) {
- char c;
- cin >> c;
- if (c == 'u') { // update
- int pos, val;
- cin >> pos >> val;
- pos--; // 0-indexing
- update(pos, val);
- } else { // get
- int ql, qr;
- cin >> ql >> qr;
- ql--; // 0-indexing, half-intervals
- cout << find_min(ql, qr) << endl;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement