Cod sursa(job #1135042)

Utilizator Vladinho97Iordan Vlad Vladinho97 Data 7 martie 2014 11:31:46
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <cstdio>
#define nmax 16000
using namespace std;
int n,v[nmax];
void update(int poz,int val)
{
    while(poz<=n)
    {
        v[poz]+=val;
        int i=0;
        while(((1<<i)&poz)==0)
        {
            i++;
        }
        poz=poz+(1<<i);
    }
}
int query(int x)
{
    int s=0,i;
    while(x>0)
    {
        s=s+v[x];
        int i=0;
        while((x&(1<<i))==0)
        {
            i++;
        }
        x=x-(1<<i);
    }
    return s;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int i,j,poz,val,m,op,x,y;
    scanf("%d%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&val);
        update(i,val);
    }
    for(i=1;i<=m;i++)
    {
        scanf("%d",&op);
        if(op==0)
        {
            scanf("%d%d",&poz,&val);
            update(poz,-val);
        }
        if(op==1)
        {
            scanf("%d%d",&x,&y);
            printf("%d\n",query(y)-query(x-1));
        }
    }
    return 0;
}