Cod sursa(job #2343169)

Utilizator MaxTeoTeo Oprescu MaxTeo Data 13 februarie 2019 18:53:36
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <bits/stdc++.h>
#define lastBit(x) (x & (-x))
using namespace std;

ifstream f("datorii.in");
ofstream g("datorii.out");

const int MAX = 15005;

int n, m;
int tree[MAX];

int Sum(int a)
{
    int sum = 0;
    for(; a; a -= lastBit(a))
        sum += tree[a];
    return sum;
}

int Sum(int a, int b)
{
    return Sum(b) - (a == 1 ? 0 : Sum(a - 1));
}

void Update(int idx, int value)
{
    for(; idx <= n; idx += lastBit(idx))
        tree[idx] += value;
}

int main()
{
    f >> n >> m;

    int x;
    for(int i = 1; i <= n; ++i)
    {
        f >> x;
        Update(i, x);
    }

    int op, a, b;
    while(m--)
    {
        f >> op >> a >> b;
        switch(op)
        {
            case 0:      Update(a, -b);     break;
            case 1: g << Sum(a, b) << "\n"; break;
        }
    }
    return 0;
}