Cod sursa(job #1938101)

Utilizator rares1012Rares Cautis rares1012 Data 24 martie 2017 16:58:46
Problema Datorii Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <stdio.h>
#include <stdlib.h>
#define k(x) (x&(-x))

int v[15001];
int aib[15001];

int n;

void add(int x,int quantity)
{
    int i;
    for(i=x;i<=n;i+=k(i))
        aib[i]+=quantity;
}

int compute(int x){
    int i,ret=0;
    for(i=x;i>0;i-=k(i))
      ret+=aib[i];
    return ret;
}

int main()
{
    int m,i,q,p,cer;
    FILE*fi,*fo;
    fi=fopen("datorii.in","r");
    fo=fopen("datorii.out","w");
    fscanf(fi,"%d%d",&n,&m);
    for(i=1;i<=n;i++){
      fscanf(fi,"%d",&q);
      add(i,q);
    }
    for(i=0;i<m;i++)
    {
      fscanf(fi,"%d",&cer);
      if(cer==0){
      fscanf(fi,"%d%d",&p,&q);
      add(p,-q);
      }
      else {
        fscanf(fi,"%d%d",&p,&q);
        fprintf(fo,"%d\n",compute(q)-compute(p-1));
      }
    }
    fclose(fi);
    fclose(fo);
    return 0;
}