Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- typedef long long ll;
- void build_tree(vector<ll>& seg, const vector<ll>& arr, int idx, int l, int r){
- if(l == r){
- seg[idx] = arr[l];
- return;
- }
- int mid = (l + r) / 2;
- build_tree(seg, arr, idx * 2, l, mid);
- build_tree(seg, arr, idx * 2 + 1, mid + 1, r);
- seg[idx] = seg[idx * 2] + seg[idx * 2 + 1];
- }
- ll query_tree(const vector<ll>& seg, int idx, int l, int r, int ql, int qr){
- if(ql > r || qr < l) return 0;
- if(ql <= l && r <= qr) return seg[idx];
- int mid = (l + r) / 2;
- return query_tree(seg, idx * 2, l, mid, ql, qr) +
- query_tree(seg, idx * 2 + 1, mid + 1, r, ql, qr);
- }
- void update_tree(vector<ll>& seg, int idx, int l, int r, int pos, ll new_val){
- if(l == r){
- seg[idx] = new_val;
- return;
- }
- int mid = (l + r) / 2;
- if(pos <= mid)
- update_tree(seg, idx * 2, l, mid, pos, new_val);
- else
- update_tree(seg, idx * 2 + 1, mid + 1, r, pos, new_val);
- seg[idx] = seg[idx * 2] + seg[idx * 2 + 1];
- }
- int main(){
- ios::sync_with_stdio(false);
- cin.tie(0);
- int n, q;
- cin >> n >> q;
- vector<ll> arr(n + 1);
- for(int i = 1; i <= n; i++){
- cin >> arr[i];
- }
- vector<ll> seg(4 * n, 0);
- build_tree(seg, arr, 1, 1, n);
- while(q--){
- int type;
- cin >> type;
- if(type == 1){
- int k;
- ll u;
- cin >> k >> u;
- update_tree(seg, 1, 1, n, k, u);
- arr[k] = u;
- }
- else{
- int l, r;
- cin >> l >> r;
- cout << query_tree(seg, 1, 1, n, l, r) << "\n";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement