Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <math.h>
- #include <vector>
- #include <set>
- #include <unordered_set>
- #include <tuple>
- #include <map>
- #include <unordered_map>
- #include <string>
- #include <string.h>
- #include <utility>
- #include <algorithm>
- #include <queue>
- #include <deque>
- #include <iterator>
- #include <stdlib.h>
- #include <cstdlib>
- #include <bitset>
- #include <fstream>
- using namespace std;
- struct TREE {
- vector<int> tree;
- TREE(vector<int>& mas) {
- int a = mas.size();
- tree.resize(a << 2);
- }
- void build(int v, int l, int r, vector<int>& mas) {
- if (r - l == 1) {
- tree[v] = l;
- return;
- }
- int m = (r + l) >> 1;
- build((v << 1) + 1, l, m, mas);
- build((v << 1) + 2, m, r, mas);
- tree[v] = (mas[tree[(v << 1) + 1]] >= mas[tree[(v << 1) + 2]] ? tree[(v << 1) + 1] : tree[(v << 1) + 2]);
- }
- int get_ans(int v, int l, int r, int askl, int askr, vector<int>& mas) {
- if (l >= askr || r <= askl) {
- return mas.size() - 1;
- }
- if (l >= askl && r <= askr) {
- return tree[v];
- }
- int m = (l + r) >> 1;
- int ans1 = get_ans((v << 1) + 1, l, m, askl, askr, mas);
- int ans2 = get_ans((v << 1) + 2, m, r, askl, askr, mas);
- return (mas[ans1] >= mas[ans2] ? ans1 : ans2);
- }
- void change(int v, int l, int r, int pos, int value, vector<int>& mas) {
- if (r - l == 1) {
- mas[l] = value;
- return;
- }
- int m = ((r + l) >> 1);
- if (pos < m) {
- change((v << 1) + 1, l, m, pos, value, mas);
- } else {
- change((v << 1) + 2, m, r, pos, value, mas);
- }
- tree[v] = (mas[tree[(v << 1) + 1]] >= mas[tree[(v << 1) + 2]] ? tree[(v << 1) + 1] : tree[(v << 1) + 2]);
- }
- };
- int main() {
- int n = 0; cin >> n;
- vector<int> mas(n);
- for (int i = 0; i < n; ++i) {
- cin >> mas[i];
- }
- TREE tree (mas);
- tree.build(0, 0, n, mas);
- mas.push_back(INT32_MIN);
- int k = 0; cin >> k;
- for (int i = 0; i < k; ++i) {
- char t;
- int x, y;
- cin >> t >> x >> y;
- if (t == 's') {
- cout << tree.get_ans(0, 0, n, x - 1, y, mas) + 1 << " ";
- } else if (t == 'u') {
- tree.change(0, 0, n, x - 1, y, mas);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement