Cod sursa(job #1247314)

Utilizator borscalinCalin-Stefan Georgescu borscalin Data 22 octombrie 2014 17:03:08
Problema Datorii Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 0.73 kb
#include <stdio.h>

int aib[15001];

int n;

void update(int poz, int valuare){
    for (;poz<=n;poz+=poz&(poz-1)^poz)
       aib[poz]+=valuare;
}

int query(int poz){
    int s;
    s=0;
    for (;poz;poz-=poz&(poz-1)^poz)
      s=s+aib[poz];
    return s;
}

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