Cod sursa(job #213915)

Utilizator Mishu91Andrei Misarca Mishu91 Data 12 octombrie 2008 00:19:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
//cu arbori indexati binar
#include <cstdio>

#define step ((k ^ (k - 1)) & k)
#define MAX_N 15005

int V[MAX_N], A[MAX_N];
int N, M;

void update(int k, int val)
{
    while(k <= N)
    {
        A[k] += val;
        k += step;
    }
}

int sum(int k)
{
    int Res = 0;
    while(k)
    {
        Res += A[k];
        k -= step;
    }
    return Res;
}

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

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

void solve()
{
    int t, a, b;
    while(M--)
    {
        scanf("%d %d %d",&t,&a,&b);

        if(!t)
            update(a,-b);
        else
            printf("%d\n",sum(b) - sum(a-1));
    }
}

int main()
{
    freopen("datorii.in","rt",stdin);
    freopen("datorii.out","wt",stdout);
    citire();
    solve();
}