Cod sursa(job #905573)

Utilizator superman_01Avramescu Cristian superman_01 Data 5 martie 2013 22:17:32
Problema Datorii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<cstdio>

#define MAX_SIZE 100005

using namespace std;

int S[MAX_SIZE],N,M;
int x,tip,a,b;

void update( int poz ,int val )
{
    for(int i=poz; i <= N; i+=i&(-i))
        S[i]+=val;

}
int  query (  int val)
{
    int result=0;
 for(int i= val ; i ; i-=i&(-i) )
        result+=S[i];
 return result;
}
int update1( int poz , int val)
{
       for(int i=poz; i <= N; i+=i&(-i))
        S[i]-=val;


}
int main( void )
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&N,&M);
    for(int i(1); i <= N ; ++i)
    {
        scanf("%d",&x);
        update(i,x);
    }

    for(int i(1); i <= M ; ++i)
    {
        scanf("%d",&tip);
        if( tip == 0 )
        {
            scanf("%d%d",&a,&b);
            update1(a,b);
            continue;
        }
        if( tip == 1)
        {
            scanf("%d%d",&a,&b);

            printf("%d\n",query(b)-query(a-1));
            continue;
        }


    }



   return 0;

}