Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cstdio>
- #include <cmath>
- #include <iomanip>
- #include <cstdlib>
- #include <climits>
- int my_array[100000];
- int tree_segments[400000];
- using namespace std;
- void build(int A[], int number, int left, int right) {
- if (left == right)
- tree_segments[number] = A[left];
- else {
- int middle = (left + right) / 2;
- build(A, number * 2 + 1, left, middle);
- build(A, number * 2 + 2, middle + 1, right);
- tree_segments[number] = tree_segments[number * 2 + 1] +
- tree_segments[number * 2 + 2];
- }
- }
- long long get_sum(int number, int left, int right, int need_left, int need_right) {
- if (need_left > need_right)
- return 0;
- if (need_left == left && need_right == right)
- return tree_segments[number];
- int middle = (left + right) / 2;
- return get_sum(number * 2 + 1, left, middle, need_left, min(middle, need_right)) +
- get_sum(number * 2 + 2, middle + 1, right, max(middle + 1, need_left), need_right);
- }
- void update(int position, int new_val, int size) {
- int number = 0;
- int left = 0;
- int right = size - 1;
- while (position != right || position != left) {
- int middle = (left + right) / 2;
- if (position > middle) {
- left = middle + 1;
- number = number * 2 + 2;
- }
- else {
- right = middle;
- number = number * 2 + 1;
- }
- }
- tree_segments[number] = new_val;
- }
- int main() {
- freopen("input.txt", "r", stdin);
- int n, amount_reqst;
- cin >> n;
- for (int i = 0; i < n; i++) {
- int current_element;
- cin >> current_element;
- my_array[i] = current_element;
- }
- build(my_array, 0, 0, n - 1);
- cin >> amount_reqst;
- for (int i = 0; i < amount_reqst; i++) {
- char type_of_reqst;
- cin >> type_of_reqst;
- if (type_of_reqst == 's') {
- int left, right;
- cin >> left >> right;
- cout << get_sum(0, 0, n - 1, left, right) << ' ';
- }
- if (type_of_reqst == 'u') {
- int position, new_val;
- cin >> position >> new_val;
- update(position, new_val, n);
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement