Cod sursa(job #1425393)

Utilizator killer301Ioan Andrei Nicolae killer301 Data 27 aprilie 2015 13:26:16
Problema Datorii Scor 100
Compilator cpp Status done
Runda pregatire-lot-aib Marime 0.96 kb
#include <cstdio>

using namespace std;

int n, m;
int a[15005], aib[15005];

inline int lsb(int x)
{
    return x&-x;
}

void build(int pos, int val)
{
    for(int i=pos; i<=n; i += lsb(i))
        aib[i]+=val;
}

void update(int pos, int val)
{
    for(int i=pos; i<=n; i += lsb(i))
        aib[i]-=val;
}

int querry(int pos)
{
    int s=0;
    for(int i = pos; i > 0; i -= lsb(i))
        s += aib[i];
    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++)
    {
        int x;
        scanf("%d", &x);
        build(i, x);
    }
    for(int i=0; i<m; i++)
    {
        bool type;
        int x, y;
        scanf("%d%d%d", &type, &x, &y);
        if(type==0)
        {
            update(x, y);
        }
        else
        {
            printf("%d\n", querry(y)-querry(x-1));
        }
    }
    return 0;
}