Cod sursa(job #2316323)

Utilizator halianStefanca Stefan halian Data 11 ianuarie 2019 16:26:01
Problema Datorii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>


int aib[15001], n, m;

int zeroes (int x)
{
    return x & -x;
}

void add(int x, int q)
{
    for(; x <= n; x += zeroes(x) )
        aib[x]+=q;
}

int compute(int x)
{
    int ret = 0;
    for(; x > 0; x -= zeroes(x) )
        ret += aib[x];

    return ret;
}

int main()
{
    int i, op, x, q, l, h;

    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%i%i", &n, &m);
    for (i = 1; i <= n; ++i)
    {
        scanf("%i", &x);
        add(i, x);
    }

    for (i = 0; i < m; ++i)
    {
        scanf("%i", &op);
        switch(op)
        {
        case 0:
            scanf("%i%i", &x, &q);
            add(x, -q);
            break;
        case 1:
            scanf("%i%i", &l, &h);
            printf("%i\n", compute(h) - compute(l-1));
            break;
        }
    }
}