Cod sursa(job #1248356)

Utilizator TibiraducanuTiberiu Raducanu Tibiraducanu Data 24 octombrie 2014 22:56:59
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include<cstdio>
using namespace std;
const int NMAX = 15000;
int aib[NMAX+1];
int n;
int lsb(int x)
{
    return x&(-x);
}
void update(int val, int poz) {
    for(int i = poz; i <= n; i += lsb(i))
        aib[i] -= val;

}
int query(int poz) {
    int ans = 0;
    while(poz) {
        ans += aib[poz];
        poz -= lsb(poz);
    }
    return ans;
}
int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int m, i, val, op, a, b;
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++) {
        scanf("%d", &val);
        update(-val, i);
    }

    for(i = 1; i <= m; i++) {
        scanf("%d%d%d", &op, &a, &b);
        if(op == 0)
            update(b, a);
        if(op == 1)
            printf("%d\n", query(b) - query(a-1));

    }
    return 0;
}