Cod sursa(job #113131)

Utilizator SharpeBigadrian ursulescu SharpeBig Data 8 decembrie 2007 20:57:16
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.68 kb
#include <stdio.h>
using namespace std;
   FILE *fin=fopen("datorii.in","r"),*fout=fopen("datorii.out","w");
   int a,b,c,i,n,m,A[16000]={0},B[16000]={0};
   void adauga(int x,int cat)
   {   while(x<=n)
       { A[x]+=cat;  x+=x^(x&(x-1));}
   }
   int  extrage(int x)
   { int rezultat=0;
     while(x>0)
     { rezultat+=A[x],x-=x^(x&(x-1));}
     return rezultat;
   }
int main()
{ fscanf(fin,"%d %d\n",&n,&m);
  for(i=1;i<=n;fscanf(fin,"%d",&a),B[i]=a+B[i-1],i++);
  for(i=1;i<=m;i++)
  { fscanf(fin,"%d %d %d",&a,&b,&c);
    if(!a) adauga(b,c);else
    fprintf(fout,"%d\n",B[c]-B[b-1]-(extrage(c)-extrage(b-1)));
  }  
  fclose(fin);fclose(fout);  
  return 0;   
}