Cod sursa(job #3139300)

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

#define zeros(x) ( (x ^ (x - 1)) & x )
int n,AIB[15000]={0};

void Add(int x, int quantity) {
    for (int i = x; i <= n; i += zeros(i))
        AIB[i] += quantity;
}

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

int main()
{
    int x,m,i,tip,a,b;
    FILE *fin, *fout;
    fin=fopen("datorii.in", "r");
    fout=fopen("datorii.out", "w");
    fscanf(fin, "%d %d", &n, &m);
    for(i=1;i<=n;i++) {
      fscanf(fin, "%d", &x);
      Add(i, x);
    }
    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;
}