Cod sursa(job #954849)

Utilizator SmarandaMaria Pandele Smaranda Data 30 mai 2013 11:17:35
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>

using namespace std;

const long N = 15001;
long n, m, aib [N];

long lsb (long x){
    return x & (-x);
}

long query (long x){
    long ans = 0;
    while (x){
        ans += aib [x];
        x -= lsb (x);
    }
    return ans;
}

void update (long x, long value){
    for (long i = x; i <= n; i += lsb (i))
        aib [i] += value;
}

int main (){
    long i, t, a, b, ans;

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

    scanf ("%ld%ld", &n, &m);
    for (i = 1; i <= n; i ++){
        scanf ("%ld", &a);
        update (i, a);
    }
    for (i = 1; i <= m; i ++){
        scanf ("%ld", &t);
        if (t == 0){
            scanf ("%ld%ld", &a, &b);
            update (a, -b);
        }
        else{
            scanf ("%ld%ld", &a, &b);
            ans = query (b) - query (a - 1);
            printf ("%ld\n", ans);
        }
    }
    return 0;
}