Cod sursa(job #1208884)

Utilizator narcis_vsGemene Narcis - Gabriel narcis_vs Data 16 iulie 2014 18:39:40
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#define zeros(x) ( x&(-x) )
using namespace std;
int aib[15002];
int n,m;

void Update(int poz,int val)
{
    int i;
    while(poz<=n)
    {
        aib[poz]+=val;
        poz+=poz&(-poz);
    }
}

int Query(int poz)
{
    int sum=0;
    while(poz>0)
    {
        sum+=aib[poz];
        poz-=poz&(-poz);
    }
    return sum;
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d %d",&n,&m);
    int i,x,op,p1,p2,s1,s2,j;
    for(i=1; i<=n; i++)
    {
        scanf("%d",&x);
        Update(i,x);

    }

    for(i=1; i<=m; i++)
    {
        scanf("%d %d %d",&op,&p1,&p2);
        if(op==0)
        {
            p2*=-1;
            Update(p1,p2);

        }
        else
        {
            s1=Query(p2);
            s2=Query(p1-1);
            printf("%d \n",s1-s2);
        }
    }
//    for(i=1; i<=n; i++)
//        printf("%d ",aib[i]);
    return 0;
}