Cod sursa(job #897324)

Utilizator annaST97Stan Ana Maria annaST97 Data 27 februarie 2013 19:59:26
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<cstdio>
#define nmax 15010
using namespace std;
int v[nmax],n,m,x,i,key,a,b,sum(int);
void insert(int,int);
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);
        insert(i,x);
    }
    for(;m;--m)
    {
        scanf("%d%d%d", &key, &a, &b);
        if(key)printf("%d\n", sum(b)-sum(a-1));
        else insert(a,-b);
    }
    return 0;
}
void insert(int poz, int val)
{
    int z=0;
    while(poz<=n)
    {
        v[poz]+=val;
        while(!(poz&(1<<z)))z++;
        poz+=(1<<z);
        z++;
    }
}
int sum(int poz)
{
    int z=0,S=0;
    while(poz>0)
    {
        S+=v[poz];
        while(!(poz&(1<<z)))z++;
        poz-=(1<<z);
        z++;
    }
    return S;
}