Cod sursa(job #50017)

Utilizator wazupPricop Mircea wazup Data 6 aprilie 2007 18:42:55
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
long long c[15000],n,m,op,p,q,i;

void update(long long ind,long long val)
    { int poz=0;
      while (ind<=n)
      {
      c[ind]+=val;
      while ((ind&(1<<poz))==0)
	 poz++;
      ind=ind+(1<<poz);
      poz++;
      }
    }

long long sum(long long ind)
    { int poz=0;
      long long s=0;
      while (ind>0)
      { s+=c[ind];
	while ((ind&(1<<poz))==0)
	  poz++;
	ind=ind-(1<<poz);
	poz++;
      }
      return s;
    }


int main()
{
FILE *fin,*fout;
fin=fopen("datorii.in","rt");
fout=fopen("datorii.out","wt");
fscanf(fin,"%lld %lld",&n,&m);
for (i=1;i<=n;i++)
  { fscanf(fin,"%lld ",&q);
    update(i,q);
  }
for (i=1;i<=m;i++)
  { fscanf(fin,"%lld %lld %lld ",&op,&p,&q);
    if (op==0)
       update(p,-q);
    else
       fprintf(fout,"%lld\n",sum(q)-sum(p-1));
  }
return 0;
}