Cod sursa(job #752484)

Utilizator rusu_raduRusu Radu rusu_radu Data 28 mai 2012 18:28:33
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <cstdio>
#include <cassert>
#define Nmax 15005
#define InFile "datorii.in"
#define OutFile "datorii.out"

using namespace std;

int n, m;
int Aib[Nmax];

void update (int x, int q);
int query (int x);
inline int zeros (int x) {return (x^(x-1))&x;}
void read();

int main()
{
  int i, op, a, b;
  assert (freopen (InFile, "r", stdin));
  assert (freopen (OutFile, "w", stdout));
  read();
  for (i=1; i<=m; i++)
  {
    scanf ("%d %d %d\n", &op, &a, &b);
    if (op==0)
      update (a, -b);
    else
      printf ("%d\n", query (b)-query (a-1));
  }
  return 0;
}

void read()
{
  int i, a;
  scanf ("%d %d\n", &n, &m);
  for (i=1; i<=n; i++)
    scanf ("%d ", &a), update (i, a);
}

void update (int x, int q)
{
  int i;
  for (i=x; i<=n; i+=zeros (i))
    Aib[i]+=q;
}

int query (int x)
{
  int i, Sum=0;
  for (i=x; i>0; i-=zeros (i))
    Sum+=Aib[i];
  return Sum;
}