Cod sursa(job #189791)

Utilizator me_andyAvramescu Andrei me_andy Data 18 mai 2008 13:20:56
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 kb
#include<fstream.h>

 ifstream f("datorii.in");
 ofstream g("datorii.out");

 long a[16001],n,poz,x,y,z,k,i;
void adaug(int x,int y)
{
 int poz=0,x1;
 while(x<=n)
 {
  a[x]+=y;
  x1=x;
  while(x1%2==0)
  {
   x1=x1/2;
     poz++;
  }
  x+=(1<<poz);
 }
}


void adaug2(int x,int y)
{
 int poz=0,x1;
 while(x<=n)
 {
  a[x]-=y;
  x1=x;
  while(x1%2==0)
  {
   x1=x1/2;
     poz++;
  }
  x+=(1<<poz);
 }
}


int suma(int k)
{
 int k1,s=0,poz=0;;
 while(k>0)
 {
  s+=a[k];
  k1=k;
  while(k1%2==0)
  {
   k1=k1/2;
     poz++;
  }
  k-=(1<<poz);
 }
 return s;
}


int main()
{
 f>>n>>k;
 for(i=1;i<=n;i++)
 {
  f>>x;
  adaug(i,x);
 }
 for(i=1;i<=k;i++)
 {
  f>>x>>y>>z;
  if(x==1)
   g<<(suma(z)-suma(y-1))<<"\n";
  else
   adaug2(y,z);
 }
 return 0;
}