Cod sursa(job #85273)

Utilizator BMCBou Marian Catalin BMC Data 20 septembrie 2007 18:58:10
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
//Bou Marian Catalin
#include<fstream.h>

ifstream fin("datorii.in");
ofstream fout("datorii.out");
int a[15001],n;

int doilan(int poz)
{
  int p=1;
  while(poz%2==0)
   { poz/=2; p*=2; }
  return p;
}

void add(int poz,int x)
{
  if(poz>n) return;
  a[poz]+=x;
  add(poz+doilan(poz),x);
}

int find(int poz)
{
  if(poz==0) return 0;
  return a[poz]+ find(poz-doilan(poz));
}


int main()
{
  int i,x,m,r,q,p,s;
  fin>>n>>m;
  for(i=0;i<=n;i++)
    a[i]=0;
  for(i=1;i<=n;i++)
  {
    fin>>x;
    add(i,x);
  }

  for(i=1;i<=m;i++)
  {
    fin>>r>>p>>q;
    if(r==0) add(p,(-1)*q);
    else
    {
      s=find(q)-find(p-1);
      fout<<s<<'\n';
    }
  }
return 0;}