Cod sursa(job #1095403)

Utilizator gabrielvGabriel Vanca gabrielv Data 30 ianuarie 2014 21:13:38
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>

using namespace std;

#define NMAX 15015

#define zeros(i) (i&-i)

int N,M;
int AIB[NMAX],A[NMAX];

void Update(int val, int pos)
{
    for(int i=pos;i<=N;i+=zeros(i))
        AIB[i] += val;
}

int Query(int pos)
{
    int Sum=0;
    for(int i=pos; i>0 ;i-=zeros(i))
        Sum += AIB[i];
    return Sum;
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);

    scanf("%d%d",&N,&M);

    for(int i=1,x;i<=N;i++)
    {
        scanf("%d",&x);
        Update(x,i);
    }

    for(int i=1,a,b,c;i<=M;i++)
    {
        scanf("%d%d%d",&a,&b,&c);

        if(a==1)
            printf("%d\n",Query(c)-Query(b-1));
        else
            Update(-c,b);
    }

    return 0;
}