Cod sursa(job #3139291)

Utilizator Tibi201eweREWR Tibi201 Data 27 iunie 2023 00:26:04
Problema Datorii Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
#include <stdlib.h>

#define zeros(x) ( (x^(x-1))&x )

int n, AIB[15000];

void Add(int x, int quantity)
{
    int i;

    for (i = x; i <= n; i += zeros(i))
        AIB[i] += quantity;
}

int Compute(int x)
{
    int i, ret = 0;

    for (i = x; i > 0; i -= zeros(i))
        ret += AIB[i];
    return ret;
}

int main()
{
    FILE *fin, *fout;
    int x,m,i,tip,a,b;
    fin=fopen("datorii.in", "r");
    fscanf(fin, "%d %d", &n, &m);
    for(i=1; i<=n; i++){
      fscanf(fin, "%d", &x);
      Add(i, x);
    }
    fout=fopen("datorii.out", "w");
    for(i=0; i<m; i++){
      fscanf(fin, "%d %d %d", &tip, &a, &b);
      if(tip==1){
        fprintf(fout, "%d\n", (Compute(b) - Compute(a-1)));
      }
      else{
        Add(a, -b);
      }
    }
    fclose(fin);
    fclose(fout);
    return 0;
}