Cod sursa(job #2446424)

Utilizator MatteoalexandruMatteo Verzotti Matteoalexandru Data 8 august 2019 20:51:23
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
// Matteo Verzotti - C++
// Solutie cu arbori indexati binar
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#include <ctime>
#include <map>
#include <chrono>
#include <cmath>
#define INF 0x3f3f3f3f
#define MAX(a,b) a>b ? a:b
#define MIN(a,b) a<b ? a:b
#define lsb(i) i & (-i)

using namespace std;

const int N = 15000;

int aib[5 + N];
int n;

void Add(int nod, int sum){
    for(int i = nod; i <= n; i += lsb(i))
        aib[i] += sum;
}

void Update(int nod, int sum){
    for(int i = nod; i <= n; i += lsb(i))
        aib[i] -= sum;
}

int GetSum(int nod){
    int s = 0;
    for(int i = nod; i >= 1; i -= lsb(i))
        s += aib[i];
    return s;
}

int main()
{
    freopen("datorii.in","r",stdin);
    freopen("datorii.out","w",stdout);
    int m, p, x, y, i;
    scanf("%d%d", &n, &m);
    for(i = 1; i <= n; i++){
        scanf("%d", &x);
        Add(i,x);
    }
    for(i = 1; i <= m; i++){
        scanf("%d%d%d", &p, &x, &y);
        if(p == 0) Update(x,y);
        else printf("%d\n",GetSum(y) - GetSum(x-1));
    }
    return 0;
}