Cod sursa(job #1680641)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 8 aprilie 2016 22:24:40
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <stdio.h>
#define NMAX 15001

int aib [ NMAX ] ;
int n ;

int lsb (int x ) {
  return ( (x ^ (x-1) ) & x ) ;
}

void add (int poz, int val ) {

  int i ;

  for (i = poz ; i <= n ; i += lsb (i) ) {
    aib[i] += val ;
  }

}

void scad(int poz, int val ) {

  int i ;

  for (i = poz ; i <= n ; i += lsb (i) ) {
    aib[i] -= val ;
  }

}

int sum (int poz ) {

  int i, sol ;

  sol = 0 ;

  for (i = poz ; i > 0 ; i -= lsb (i) )
    sol += aib[i] ;

  return sol ;

}
int main()
{
  FILE *fin, *fout ;

  fin = fopen ("datorii.in", "r" ) ;
  fout = fopen ("datorii.out", "w" ) ;

  int  m, i, tip, st, dr, val, poz, elem ;
  fscanf (fin, "%d%d", &n, &m ) ;

  for (i = 1 ; i <= n ; i++ ) {
    fscanf (fin, "%d", &elem ) ;
    add (i, elem ) ;
  }

  for (i = 0 ; i < m ; i++ ) {
    fscanf (fin, "%d", &tip ) ;
    if (tip == 0 ) {
      fscanf (fin, "%d%d", &poz, &val ) ;
      scad (poz, val ) ;
    }
    else {
      fscanf (fin, "%d%d", &st, &dr ) ;
      fprintf (fout, "%d\n", sum (dr) - sum (st-1) ) ;
    }
  }

  return 0;
}