Cod sursa(job #1097950)

Utilizator bogdan10bosBogdan Sitaru bogdan10bos Data 4 februarie 2014 11:45:36
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <cstdio>
#define LSB(x) ((-x)&x)
using namespace std;

int x,N,M,i,aib[100005],t,a,b;
void Update(int V,int Pos)
{
    int i;
    for(i=Pos;i<=N;i=i+LSB(i))
            aib[i]=aib[i]-V;
}
void Update_citire(int V,int Pos)
{
    int i;
    for(i=Pos;i<=N;i=i+LSB(i))
            aib[i]=aib[i]+V;
}

int Suma(int Pos)
{
    int i,s=0;
    for(i=Pos; i>0; i-=LSB(i))
            s=s+aib[i];
    return s;
}

int query(int P1,int P2)
{
    return (Suma(P2)-Suma(P1-1));
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&N,&M);
    for( i = 1; i <= N; i++ )
    {
        scanf("%d",&x);
        Update_citire(x,i);
    }
    while(M>0)
    {
        M--;
        scanf("%d",&t);
        if ( t==0 )
        {
                scanf("%d%d\n",&a,&b);
                Update( b, a );
        }
        else
        {
                scanf("%d%d\n",&a,&b);
                printf("%d\n",query(a,b));
        }
    }
    return 0;
}