Cod sursa(job #2088735)

Utilizator petru.ciocirlanPetru Ciocirlan petru.ciocirlan Data 15 decembrie 2017 19:31:57
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <bits/stdc++.h>
#define in "datorii.in"
#define out "datorii.out"
#define MN 15005
using namespace std;
int N, M, Arb[MN];

void update(int poz, int val);
int query(int poz);

int main()
{
    assert(freopen(in, "r", stdin));
    assert(freopen(out,"w", stdout));
    assert(scanf("%d%d", &N, &M));
    for(int x, i = 1; i <= N; ++i)
    {
        assert(scanf("%d", &x));
        update(i, x);
    }
    for(int tip, a, b; M; --M)
    {
        assert(scanf("%d%d%d", &tip, &a, &b));
        if(!tip)
            update(a, -b);
        else
        {
            assert(printf("%d\n", query(b)-query(a-1)));
        }
    }
    return 0;
}

void update(int poz, int val)
{
    while(poz <= N)
    {
        Arb[poz] += val;
        poz += (poz & -poz);
    }
}

int query(int poz)
{
    int sum = 0;
    while(poz > 0)
    {
        sum += Arb[poz];
        poz -= (poz & -poz);
    }
    return sum;
}