Cod sursa(job #2687196)

Utilizator TheGodFather2131Alexandru Miclea TheGodFather2131 Data 19 decembrie 2020 16:17:02
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.45 kb
//ALEXANDRU MICLEA

#include <vector>
#include <algorithm>
#include <string>
#include <string.h>
#include <cstring>
#include <queue>
#include <map>
#include <set>
#include <unordered_map>
#include <time.h>
#include <iomanip>
#include <deque>
#include <math.h>
#include <cmath>
#include <assert.h>
#include <stack>
#include <bitset>
#include <random>
#include <chrono>
#include <assert.h>

using namespace std;
using ll = long long;

#include <fstream>
//ifstream cin("input.in"); ofstream cout("output.out");
ifstream cin("datorii.in"); ofstream cout("datorii.out");

//VARIABLES

int n, m;
vector <int> bit(15005);

//FUNCTIONS

void init (int pos, int val){

    for (int i = pos; i <= n; i += i & (-i)) bit[i] += val;

}

void update (int pos, int val){

    for (int i = pos; i <= n; i += i & (-i)) bit[i] -= val;

}

int query (int pos){
    int ans = 0;

    for (int i = pos; i >= 1; i -= i & (-i)) ans += bit[i];

    return ans;
}

//MAIN

int main() {

    cin >> n >> m;
    for (int i = 1; i <= n; i++){
        int val; cin >> val;
        init(i, val);
    }

    for (int i = 1; i <= m; i++){
        int tip, a, b;
        cin >> tip >> a >> b;

        if (tip == 0) update (a, b);
        if (tip == 1) {
            //for (int j = 1; j <= n; j++) cout << bit[i] << ' ';
            //cout << '\n';
            cout << query(b) - query(a - 1) << '\n';
        }
    }

    return 0;
}