Cod sursa(job #214910)

Utilizator EdeNNu Cred EdeN Data 16 octombrie 2008 19:46:04
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <stdio.h>
#define pas (k^(k-1))&k

int n, m, a[15001];

void create(int k, int val)
{
    while (k<=n)
        {
            a[k]+=val;
            k+=pas;
        }
}

void achitare(int k, int val)
{
    while (k<=n)
        {
            a[k]-=val;
            k+=pas;
        }
}

int sum(int k)
{
    int s=0;
    while (k>0)
       {
           s+=a[k];
           k-=pas;
       }
    return s;
}

void parc()
{
    int a, x, t, v, p, q;
    while (m>0)
        {
            scanf("%d", &x);
            if (x==0)
                {
                    scanf("%d" "%d", &t, &v);
                    achitare(t,v);
                }
            if (x==1)
                {
                    scanf("%d" "%d", &p, &q);
                    printf("%d\n", sum(q)-sum(p-1));
                }
            m--;
        }
}

void readit()
{
    int val, i;
    scanf("%d" "%d", &n, &m);
    for (i=1; i<=n; i++)
        {
            scanf("%d", &val);
            create(i,val);
        }
}

int main()
{
    int i;
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    readit();
    parc();
    return 0;
}