Cod sursa(job #2412823)

Utilizator CharacterMeCharacter Me CharacterMe Data 22 aprilie 2019 16:18:57
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <iostream>
#include <cstdio>
#define bit(x) (x&(-x))
using namespace std;
int N, M, i, j;
class BIT{
    int V[15001];
    int Query(int target){
        int out=0;
        for(j=target; j>=1; j-=bit(j)) out+=V[j];
        return out;
    }
public:
    void Add(int val, int target){
        for(j=target; j<=N; j+=bit(j))
            V[j]+=val;
        return;
    }
    void Get(int a, int b){
        printf("%d\n", Query(b)-Query(a-1));
        return;
    }
};
BIT Arb;
int main()
{
    freopen("datorii.in", "r", stdin);
    freopen("datorii.out", "w", stdout);
    scanf("%d%d", &N, &M);
    for(i=1; i<=N; ++i){
        int x;
        scanf("%d", &x);
        Arb.Add(x, i);
    }
    for(i=1; i<=M; ++i){
        int a, b, c;
        scanf("%d%d%d", &c, &a, &b);
        if(c==0) Arb.Add(-b, a);
        else Arb.Get(a, b);
    }
    return 0;
}