Cod sursa(job #2910705)

Utilizator matwudemagogul matwu Data 24 iunie 2022 15:00:55
Problema Datorii Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.25 kb
/*
	
---------------------------
	
\/\/\/\\\///\\/\/\/\/\/\/\
	
 \ / \ / \ / \ / \ / \ / \
	
 | | | | | | | | | | | | |
	
 | | | | | | | | | | | | |
	
 \ / \ / \ / \ / \ / \ / \
	
\/\/\/\\\///\\/\/\/\/\/\/\
	
 -------------------------
	

	
Secretul e să taci când nu știi ce vrei să vorbești
	
Nu încerca să pari altcineva când nu știi cine ești
	
Nu înceta să visezi, e gratis, n-ai ce să pierzi
	
Să nu crezi în destin, că în timp te plafonezi
	
*/
	
 
	
#include <bits/stdc++.h>
	
using namespace std;
	
#define int long long
	
int n, q;
	
vector<int> v(15001), t(45001);
	
ifstream fin("datorii.in");
	
ofstream fout("datorii.out");
	
void build(vector<int>& a, int v, int tl, int tr){
	
 
	
    if(tl == tr) t[v] = a[tl];
	
    else{
	
        int tm = (tl + tr) / 2;
	
        build(a, v * 2, tl, tm);
	
        build(a, v * 2 + 1, tm + 1, tr);
	
 
	
        t[v] = t[v * 2] + t[v * 2 + 1];
	
    }
	
}
	
 
	
void update(int v, int tl, int tr, int pos, int val){
	
    if(tl == tr) t[v] -= val;
	
    else{
	
        int tm = (tl + tr) / 2;
	
        if(pos <= tm) update(v * 2, tl, tm, pos, val);
	
        else update(v * 2 + 1, tm + 1,tr, pos, val);
	
 
	
        t[v] = t[v * 2] + t[v * 2 + 1];
	
    }
	
}
	
 
	
int query(int v, int tl, int tr, int l, int r){
	
 
	
    if(l <= tl && r >= tr) return t[v];
	
    if(tr < l || tl > r) return 0;
	
    else{
	
        int tm = (tl + tr) / 2;
	
        int sum1 = query(v * 2, tl, tm, l, r);
	
        int sum2 = query(v * 2 + 1, tm + 1, tr, l, r);
	
 
	
        return sum1 + sum2;
	
    }
	
}
	
int32_t main(){
	
 
	
	ios_base::sync_with_stdio(false);
	
    cin.tie(nullptr); cout.tie(nullptr);
	
 
	
    fin >> n >>  q;
	
    for(int i = 1; i <= n; i++)
	
        fin >> v[i];
	
    
	
    build(v, 1, 1, n);
	
    while(q--){
	
        int task;
	
        fin >> task;
	
 
	
        if(task == 0){
	
            int pos, val;
	
            fin >> pos >> val;
	
            update(1, 1, n, pos, val);
	
        }
	
        else{
	
            int l, r;
	
            fin >> l >> r;
	
            fout << query(1, 1, n, l, r) << '\n';
	
        }
	
    }
	
 
	
}