Cod sursa(job #2445774)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 5 august 2019 14:46:13
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <iostream>
#include <cstdio>
using namespace std;
#define lsb(x) ((x&(x-1))^x)

int n;
int v[15005];
void add(int p, int x)
{
    for(int i = p; i <= n; i += lsb(i))
        v[i] += x;
}
int sum(int p)
{
    int rez = 0;
    for(int i = p; i > 0; i -= lsb(i))
        rez += v[i];
    return rez;
}
int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    int m, i, j, a, b;
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; ++i)
    {
        scanf("%d", &j);
        add(i, j);
    }
    while(m--)
    {
        scanf("%d%d%d", &j, &a, &b);
        if(j == 1)
        {
            a = sum(a-1);
            b = sum(b);
            printf("%d\n", b-a);
        }
        else
        {
            add(a, -b);
        }
    }
    return 0;
}