Cod sursa(job #1685042)

Utilizator papinubPapa Victor papinub Data 11 aprilie 2016 14:20:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
# include <cstdio>
using namespace std;

FILE *f = freopen("datorii.in", "r", stdin);
FILE *g = freopen("datorii.out", "w", stdout);

const int N_MAX = 15001;

int v[N_MAX];
int aib[N_MAX];

int N, M;

void update_aib(int pos, int val)
{
    aib[pos] += val;

    while (pos <= N)
    {
        pos += pos & (pos ^ (pos-1));
        aib[pos] += val;
    }
}

int query_aib(int pos)
{
    int ans = 0;

    while (pos)
    {
        ans += aib[pos];
        pos -= pos & (pos ^ (pos-1));
    }

    return ans;
}

void read()
{
    scanf("%d %d", &N, &M);

    for (int i=1; i<=N; i++)
    {
        scanf("%d", &v[i]);
        update_aib(i, v[i]);
    }
}

void solve()
{
    for (int i=1; i<=M; i++)
    {
        int type, a, b;

        scanf("%d %d %d", &type, &a, &b);

        if (type == 0)
            update_aib(a, -b);
        else
            printf("%d\n", query_aib(b) - query_aib(a-1));
    }
}

int main()
{
    read();
    solve();
    return 0;
}