Cod sursa(job #2452665)

Utilizator Tudor06MusatTudor Tudor06 Data 31 august 2019 17:35:40
Problema Datorii Scor 100
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>
#include <stdlib.h>

int aib[15001];

int zeros( int i ) {
  return ( i ^ ( i - 1 ) ) & i;
}

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

int sum( int poz ) {
  int s = 0, i;
  for ( i = poz; i > 0; i -= zeros(i) ) {
    s += aib[i];
  }
  return s;
}
int main() {
  FILE *fin = fopen( "datorii.in", "r" ), *fout = fopen( "datorii.out", "w" );
  int n, i, m, cer, a, b;
  fscanf( fin, "%d%d", &n, &m );
  for ( i = 1; i <= n; i ++ ) {
    fscanf( fin, "%d", &a );
    update( n, a, i );
  }
  for ( i = 0; i < m; i ++ ) {
    fscanf( fin, "%d", &cer );
    switch ( cer ) {
    case 0:
      fscanf( fin, "%d%d", &a, &b );
      b *= -1;
      update( n, b, a );
      break;
    case 1:
      fscanf( fin, "%d%d", &a, &b );
      fprintf( fout, "%d ", sum(b) - sum( a - 1 ) );
      break;
    }
  }
  fclose( fin );
  fclose( fout );
  return 0;
}