Cod sursa(job #2120377)

Utilizator andy1207Cioltan Andrei andy1207 Data 2 februarie 2018 13:18:59
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <cstdio>

const int MAX_N = 15000;

int N;
int aib[5 + MAX_N];

int terminal0(int x) {
  return x & -x;
}

void update(int poz, int val) {
  for (int i = poz; i <= N; i += terminal0(i)) {
    aib[i] += val;
  }
}

int query(int poz) {
  int s = 0;
  for (int i = poz; i >= 1; i -= terminal0(i)) {
    s += aib[i];
  }
  return s;
}

int main() {
  freopen("datorii.in", "r", stdin);
  freopen("datorii.out", "w", stdout);

  int M;
  scanf("%d%d", &N, &M);
  for (int i = 1; i <= N; i++) {
    int x;
    scanf("%d", &x);
    update(i, x);
  }
  for (int i = 1; i <= M; i++) {
    int type, a, b;
    scanf("%d%d", &type, &a);
    if (type == 0) {
      scanf("%d", &b);
      update(a, -b);
    } else {
      scanf("%d", &b);
      printf("%d\n", query(b) - query(a - 1));
    }
  }
  return 0;
}