Cod sursa(job #1521295)

Utilizator vladdy47Bucur Vlad Andrei vladdy47 Data 10 noiembrie 2015 09:15:49
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
# include <bits/stdc++.h>
# define ub(x) (x&(-x))

using namespace std;

const int Nmax = 15000 + 5;

int n, m, OP, val, i, aib[Nmax], x, y, nr;

int add (int val, int poz)
{
    for (int i = poz; i <= n; i += ub(i)) aib[i] += val;
}

int scad(int poz, int val)
{
    for (int i = poz; i <= n; i += ub(i)) aib[i] -= val;
}

int sum(int poz)
{
    int suma = 0;
    for (int i = poz; i >= 1; i -= ub(i)) suma += aib[i];
    return suma;
}


int main ()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);

    scanf("%d %d\n", &n, &m);

    for (i = 1; i <= n; ++i)
    {
        scanf("%d\n", &val);
        add(val, i);
    }

    for (i = 1; i <= m; ++i)
    {
        scanf("%d", &OP);
        if (OP == 0)
        {
            scanf("%d %d", &x, &y);
            scad(x, y);
        }
        if (OP == 1)
        {
            scanf("%d %d", &x, &y);
            nr = sum(y) - sum(x-1);
            printf("%d\n", nr);
        }
    }

    return 0;
}