Cod sursa(job #2300841)

Utilizator CiprianC11Constantinescu Ciprian CiprianC11 Data 12 decembrie 2018 10:28:18
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <cstdio>

using namespace std;

int aib[15005], n;

void update(int poz, int val)
{
    for(; poz <= n; poz += poz & -poz) aib[poz] += val;
}

void update1(int poz, int val)
{
    for(; poz <= n; poz += poz & -poz) aib[poz] -= val;
}

int query(int a, int b)
{
    int s = 0;
    a--;
    for(; b; b -= b & -b) s += aib[b];
    for(; a; a -= a & -a) s -= aib[a];
    return s;
}

int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int m, a, b;
    bool t;
    scanf("%d%d", &n, &m);
    for(int i = 0; i < n; i++)
        scanf("%d", &a), update(i + 1, a);
    while(m--)
    {
        scanf("%d%d%d", &t, &a, &b);
        if(t) printf("%d\n", query(a, b));
        else update1(a, b);
    }
    return 0;
}