Cod sursa(job #2671632)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 12 noiembrie 2020 14:40:05
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.92 kb
#include <stdio.h>

#define pow2k(x) (x ^ (x - 1) & x)

using namespace std;

const int MAX_NUMBER = 15123;

int N, M;
int bit[MAX_NUMBER];

void modify(int index, int number) {
    for (int i = index; i <= N; i += pow2k(i)) {
        bit[i] += number;
    }
}

int query(int index) {
    int ans = 0;
    for (int i = index; i > 0; i -= i & (-i)) {
        ans += bit[i];
    }

    return ans;
}

int main() {

    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);

    scanf("%d %d", &N, &M);
    for (int i = 1; i <= N; i++) {
        int x;
        scanf("%d", &x);
        modify(i, x);
    }

    for (int i = 0; i < M; i++) {
        int type, x, y;
        scanf("%d %d %d", &type, &x, &y);
        switch (type) {
            case 0: modify(x, -y); break;
            case 1: printf("%d\n", query(y) - query(x - 1)); break;
        }
    }

    return 0;
}