Cod sursa(job #2173170)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 15 martie 2018 20:59:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <iostream>
#include <cstdio>
#define NMAX 15005

using namespace std;

int N, M, aib[NMAX];

int zero(int t) {
    return (t ^ (t -1)) & t;
}

void adaugare(int poz, int val) {
    for(int i = poz; i <= N; i += zero(i)) {
        aib[i] += val;
    }
}

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

int suma(int st, int dr) {
    int s1 = 0, s2 = 0;
    for(int i = dr; i >= 1; i -= zero(i)) {
        s1 += aib[i];
    }
    for(int i = st - 1; i >= 1; i -= zero(i)) {
        s2 += aib[i];
    }
    return s1 - s2;
}

void operations() {
    for(int i = 1; i <= M; ++i) {
        int op, x, y;
        scanf("%d %d %d", &op, &x, &y);
        if(op == 0) {
            adaugare(x, -1 * y);
        }
        else {
            int sol = suma(x, y);
            printf("%d\n", sol);
        }
    }
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    read();
    operations();
    return 0;
}