Cod sursa(job #3248814)

Utilizator ultra980Alex Stan ultra980 Data 13 octombrie 2024 13:25:14
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>

const int NMAX = 15000;
int aib[NMAX + 1];
int n;

void update(int i, int val) {
  while (i <= n) {
    aib[i] += val;
    i += (i & -i);
  }
}

int query(int i) {
  int sum = 0;
  while (i > 0) {
    sum += aib[i];
    i -= (i & -i);
  }
  return sum;
}

int main() {
  FILE *fin, *fout;
  int m, i, a, b, t;

  fin = fopen("datorii.in", "r");
  fscanf(fin, "%d%d", &n, &m);
  for (i = 1; i <= n; i++) {
    fscanf(fin, "%d", &a);
    update(i, a);
  }
  fout = fopen("datorii.out", "w");
  for (i = 0; i < m; i++) {
    fscanf(fin, "%d%d%d", &t, &a, &b);
    if (!t) { // achitare
      update(a, -b);
    } else {
      fprintf(fout, "%d\n", query(b) - query(a - 1));
    }
  }
  fclose(fin);
  fclose(fout);

  return 0;
}