Cod sursa(job #369731)

Utilizator GotenAmza Catalin Goten Data 29 noiembrie 2009 14:01:56
Problema Datorii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<fstream.h>
long n,m;
int c[100001],a;


void scadere(int i, int x)
{
 int k=0;
 while(i<=n)
 {
  c[i]-=x;
  while((i&(1<<k))==0)k++;
  i+=(1<<k);
  k++;
  }
}


int suma(int i)
{
 int s=0,k=0;
 while(i>0)
  {
   s+=c[i];
   while((i&(1<<k))==0)k++;
   i-=(1<<k);
   k++;
   }
 return s;
 }



void creare(int i)
{
 int k=0;
 c[i]+=a;
 while((i&(1<<k))==0)k++;
 c[i]+=(suma(i-1)-suma(i-(1<<k)));
 }


int main()
{
 int i,x,y;
 ifstream f("datorii.in");
 ofstream g("datorii.out");
 f>>n>>m;
 for(i=1;i<=n;i++){f>>a;creare(i);}
 for(i=1;i<=m;i++)
  {
   f>>a;
   if(a)
    {
     f>>x>>y;
     g<<suma(y)-suma(x-1);
     }
   else
    {
     f>>x>>y;
     scadere(x,y);
     }
   }
 return 0;
 }