Cod sursa(job #599101)

Utilizator vlad2901Vlad Berindei vlad2901 Data 27 iunie 2011 22:30:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include <stdio.h>

#define NMAX 15001

int a[NMAX], n;
int m;

long long secv(int n) { //suma 1...n

    long long sum = 0, curent;
    curent = n;
    while(curent > 0) {
        sum += a[curent];
        curent -= curent ^ (curent & (curent-1));
    }
    return sum;
}

void add(int poz, int val) {

    int curent;
    curent = poz;
    while(curent <= n) {
        a[curent] += val;
        curent += curent ^ (curent & (curent-1));
    }
}

int main() {

    int i, x, op, p1, p2;

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

    scanf("%d %d", &n, &m);

    for(i=1;i<=n;++i) {
        scanf("%d", &x);
        add(i, x);
    }

    for(i=0;i<m;++i) {
        scanf("%d %d %d", &op, &p1, &p2);

        if(op == 0) {
                add(p1, -p2);
            } else {
                if(p1 == 1) {
                    printf("%lld\n", secv(p2));
                } else {
                    printf("%lld\n", secv(p2) - secv(p1-1));
                }
            }
        }


    return 0;
}