Cod sursa(job #2231764)

Utilizator mihailescu_eduardMihailescu Eduard-Florin mihailescu_eduard Data 15 august 2018 21:35:55
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>

#define lsb(x) (x & (-x))

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

const int MAX_N = 15000 + 5;

/* ------------ DATA -------------*/
int n,m;
int aib[MAX_N];
/* ------------ DATA -------------*/

void Update(int position, int val)
{
    for(int i = position; i <= n; i+=lsb(i))
    {
        aib[i]+=val;
    }
}

void Achita(int day, int val)
{
    for(int i = day; i<= n; i+= lsb(i))
    {
        aib[i]-=val;
    }
}

int Query(int position)
{
    int result = 0;
    for(int i = position; i> 0 ; i-=lsb(i))
    {
        result+=aib[i];
    }
    return result;
}

int main()
{
    int x, op, a, b,i;
    scanf("%d%d",&n,&m);
    for(i = 1; i<= n; ++i)
    {
        scanf("%d",&x);
        Update(i,x);
    }
    for(i = 1; i<= m; ++i)
    {
        scanf("%d%d%d",&op,&a,&b);
        if(!op)
        {
            Achita(a,b);
        }
        else
        {
            printf("%d\n",Query(b)-Query(a-1));
        }
    }
}