Cod sursa(job #1425398)

Utilizator cella.florescuCella Florescu cella.florescu Data 27 aprilie 2015 13:38:17
Problema Datorii Scor 100
Compilator c Status done
Runda pregatire-lot-aib Marime 0.83 kb
#include <stdio.h>
#include <stdlib.h>
#define zero(x) (x&(-x))
int aib[15001];

inline void update(int poz, int val, int n){
  for(poz; poz<=n; poz+=zero(poz))
    aib[poz]+=val;
}

inline int suma(int poz){
  int sum=0;
  for(poz; poz>0; poz-=zero(poz))
    sum+=aib[poz];
  return sum;
}

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