Cod sursa(job #1209403)

Utilizator hrazvanHarsan Razvan hrazvan Data 17 iulie 2014 16:29:16
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#define MAXN 100000
int aib[MAXN + 1];

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

int sum(int poz){
  int rez = 0;
  while(poz > 0){
    rez += aib[poz];
    poz -= ultb(poz);
  }
  return rez;
}

void add(int plus, int poz, int n){
  while(poz <= n){
    aib[poz] += plus;
    poz += ultb(poz);
  }
  return ;
}

int main(){
  FILE *in = fopen("datorii.in", "r");
  int n, m;
  fscanf(in, "%d%d", &n, &m);
  int i, x;
  for(i = 1; i <= n; i++){
    fscanf(in, "%d", &x);
    add(x, i, n);
  }
  FILE *out = fopen("datorii.out", "w");
  int y, z;
  for(i = 1; i <= m; i++){
    fscanf(in, "%d%d%d", &x, &y, &z);
    if(x == 0)  add(-z, y, n);
    else        fprintf(out, "%d\n", sum(z) - sum(y - 1));
  }
  fclose(in);
  fclose(out);
  return 0;
}