Cod sursa(job #1356822)

Utilizator gabib97Gabriel Boroghina gabib97 Data 23 februarie 2015 16:50:27
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <stdio.h>
#define zero(x) (x^(x-1))&x
using namespace std;
int n,m,i,a,AIB[15001],t,x,y;
void update(int x,int y)
{
    for (int i=y;i<=n;i+=zero(i))
        AIB[i]+=x;
}
int calc(int x)
{
    int r=0;
    for (int i=x;i>0;i-=zero(i))
        r+=AIB[i];
    return r;
}
int det(int x,int y)
{
    return calc(y)-calc(x-1);
}
int main()
{
    freopen ("datorii.in","r",stdin);
    freopen ("datorii.out","w",stdout);
    scanf("%i%i",&n,&m);
    for (i=1;i<=n;i++)
    {
        scanf("%i",&a);
        update(a,i);
    }
    for (i=1;i<=m;i++)
    {
        scanf("%i%i%i",&t,&x,&y);
        if (t==0) update(-y,x);
        else printf("%i\n",det(x,y));
    }
    fclose(stdin);
    fclose(stdout);
    return 0;
}