Cod sursa(job #1988144)

Utilizator DruffbaumPopescu Vlad Druffbaum Data 2 iunie 2017 11:38:01
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <cstdio>

#define MAXN 15000

int aib[MAXN + 1];

inline void add(int poz, int val, int n) {
  while (poz <= n) {
    aib[poz] += val;
    poz += poz & -poz;
  }
}

inline int sum(int x) {
  int s = 0;
  while (x > 0) {
    s += aib[x];
    x -= x & -x;  
  }
  return s;
}

int main() {
  int n, m, a, b, op;
  FILE *fin = fopen("datorii.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    fscanf(fin, "%d", &a);
    add(i, a, n);
  }
  FILE *fout = fopen("datorii.out", "w");
  for (int i = 0; i < m; ++i) {
    fscanf(fin, "%d%d%d", &op, &a, &b);
    switch (op) {
      case 0: add(a, -b, n);
              break;
      case 1: fprintf(fout, "%d\n", sum(b) - sum(a - 1));
              break;
    }
  }
  fclose(fin);
  fclose(fout);
  return 0;
}