Cod sursa(job #479690)

Utilizator dicu_dariaDaria Dicu dicu_daria Data 24 august 2010 20:47:10
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.7 kb
#include <fstream>
#define zero(x) (x&(x^(x-1)))
using namespace std;
int arb[15005],a[15005],n,m;
void achita(int poz,int val)
{
  int i;
  for(i=poz;i<=n;i+=zero(i)) arb[i]-=val;
}
int interogare(int l,int r)
{
  int s1=0,s2=0,i;
  for(i=l-1;i>0;i-=zero(i)) s1+=arb[i];
  for(i=r;i>0;i-=zero(i)) s2+=arb[i];
  return (s2-s1);
}
int main()
{
  int i,x,y,z;
    ifstream fi("datorii.in");
    ofstream fo("datorii.out");
    fi>>n>>m;
    for(i=1;i<=n;i++) fi>>a[i], a[i]+=a[i-1];
    for(i=1;i<=n;i++)
      arb[i]=a[i]-a[i-zero(i)];

    for(i=1;i<=m;i++)
    {
      fi>>x>>y>>z;
      if(x==0) achita(y,z); else fo<<interogare(y,z)<<"\n";
    }
    fo.close();
    return 0;
}