Cod sursa(job #1776891)

Utilizator mihai.alphamihai craciun mihai.alpha Data 11 octombrie 2016 21:17:07
Problema Datorii Scor 100
Compilator cpp Status done
Runda cerculdeinfo-lectia2-arborideintervale Marime 0.78 kb
#include <stdio.h>
 
#define zeros(x) ( (x ^ (x - 1)) & x )
#define MAX_N 15002
#define MAX_M 100002
int aib[MAX_M];
int n, m;
 
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 = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");
fscanf(fin, "%d%d", &n, &m);
int i, x;
for(i = 1;i <= n;i++){
    fscanf(fin, "%d", &x);
     add(i, x);
}
int op, t, v;
for(i = 0;i < m;i++)  {
    fscanf(fin, "%d%d%d", &op, &t, &v);
    if(op == 0)  {
        add(t, -v);
    }
    else {
        fprintf(fout, "%d\n", compute(v) - compute(t - 1));
    }
}
 
 
fclose(fin);
fclose(fout);
}