Cod sursa(job #606335)

Utilizator PatrunjeluMarginean Bogdan Alexandru Patrunjelu Data 3 august 2011 20:09:32
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <stdio.h>
#define aibfunc(x) ((x^(x-1))& x)
using namespace std;

int n, m;
int aib[15001];

void update(int zi, int val)
{
    for (int i = zi; i <= n; i+=aibfunc(i))
    {
        aib[i]+=val;
    }
}

void query(int zi1, int zi2)
{
    int sum1 = 0, sum2 = 0;
    sum1 = 0;
    for (int i = zi1 - 1; i > 0; i-=aibfunc(i))
    {
        sum1+=aib[i];
    }
    for (int i = zi2; i > 0; i-=aibfunc(i))
    {
        sum2+=aib[i];
    }
    printf("%d\n", (sum2-sum1));
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d%d", &n, &m);
    int sec;
    aib[0] = 0;
    for (int i = 1; i <= n; ++i)
    {
        scanf("%d", &sec);
        update(i, sec);
    }
    int b, c;
    for (int i = 0; i < m; ++i)
    {
        scanf("%d%d%d", &sec, &b, &c);
        switch(sec)
        {
            case(0): update(b, c * -1); break;
            case(1): query(b,c); break;
        }
    }
    return 0;
}