Cod sursa(job #418200)

Utilizator mihaionlyMihai Jiplea mihaionly Data 15 martie 2010 17:15:18
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <cstdio>
using namespace std;
FILE *f=fopen("datorii.in","r");
FILE *g=fopen("datorii.out","w");
#define nmax 15010
#define f(x) (x^(x-1)&x)
//#define A (A-1)
int n,m;
int A[nmax];
void add(int in,int x,bool ok)
 {
 for(int i=in;ok&&i<=n;i+=f(i))
  A[i]+=x;
 for(int i=in;!ok&&i<=n;i+=f(i))
  A[i]-=x;
 }
int compute(int x)
 {
 int sum=0,i;
 for(i=x;i>0;i-=f(i))
  sum+=A[i];
 return sum;
 }
void solve()
 {
 bool ok;
 int x,y;
 int i;
 for(i=1;i<=m;i++)
  {
  fscanf(f,"%d %d %d",&ok,&x,&y);
  if(!ok)
   add(x,y,0);
  else
   fprintf(g,"%d\n",(compute(y)-compute(x-1)));
  }
 }
int main()
 {
 int i,x;
 fscanf(f,"%d %d",&n,&m);
 for(i=1;i<=n;i++) 
  {
  fscanf(f,"%d",&x);
  add(i,x,1);
  }
 solve();
 return 0;
 }