Cod sursa(job #1517778)

Utilizator zertixMaradin Octavian zertix Data 4 noiembrie 2015 20:23:37
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <iostream>
#include <cstdio>
using namespace std;

int n,m,aib[15200],tip,a,b;

int nr_zero(int nr)
{
    return ((nr xor (nr-1)) & nr);
}

void update(int val,int i)
{
    while (i<=n)
    {
        aib[i]+=val;
        i+=nr_zero(i);
    }
}

void achit (int val,int i)
{
    while (i<=n)
    {
        aib[i]-=val;
        i+=nr_zero(i);
    }
}
int suma (int poz)
{
    int s=0;
    while (poz>0)
    {
        s+=aib[poz];
        poz-=nr_zero(poz);
    }
    return s;
}
int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    scanf("%d%d",&n,&m);
    for (int i=1;i<=n;++i)
    {
        scanf("%d",&a);
        update(a,i);
    }
    for (int i=1;i<=m;++i)
    {
        scanf("%d%d%d",&tip,&a,&b);
        if (tip)
            printf("%d\n",suma(b)-suma(a-1));

        else
            achit(b,a);
    }
    return 0;
}