Cod sursa(job #2949575)

Utilizator smunteanuMunteanu Stefan Catalin smunteanu Data 1 decembrie 2022 00:40:26
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.11 kb
#include <bits/stdc++.h>
using namespace std;

const int nmax = 15e3 + 7;

static int n, m;
static int a[nmax];
static int aib[nmax];

int sp(int i) {
  int result = 0;
  for (; i; i -= i & -i) result += aib[i];
  return result;
}

int range(int i, int j) {
  return sp(j) - sp(i - 1);
}

void add(int i, int v) {
  for (; i <= n; i += i & -i) aib[i] += v;
}

void solve() {

  cin >> n >> m;
  for (int i = 1; i <= n; i++) {
    cin >> a[i];
    aib[i] = a[i];
  }

  for (int i = 1; i <= n; i++) {
    if (i + (i & -i) <= n) {
      aib[i + (i & -i)] += aib[i];
    }
  }

  while (m--) {

    int c;
    cin >> c;

    if (c == 0) {
      int i, v;
      cin >> i >> v;
      add(i, -v);
      continue;
    }

    if (c == 1) {
      int r, l;
      cin >> r >> l;
      cout << range(r, l) << '\n';
      continue;
    }
  }

    

}

int main() {

  #ifdef LOCAL
  freopen("file.in", "r", stdin);
  #else
  freopen("datorii.in", "r", stdin);
  freopen("datorii.out", "w", stdout);
  #endif

  ios_base::sync_with_stdio(false), cin.tie(NULL);

  solve();
}