Cod sursa(job #954854)

Utilizator cahemanCasian Patrascanu caheman Data 30 mai 2013 11:36:59
Problema Datorii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<cstdio>

using namespace std;

int aib[15005];
int n;

int lsb(int x)
{
    return x & -x;
}

void update(int x, int val)
{
  int i;
  for(i = x; i <= n; i += lsb(i))
    aib[i] += val;
}

int query(int x)
{
  int ans = 0;
  while(x)
  {
    ans += aib[x];
    x -= lsb(x);
  }
  return ans;
}

int main()
{
  freopen("datorii.in", "r", stdin);
  freopen("datorii.out", "w", stdout);
  int m, i, a, b, c;
  scanf("%d%d", &n, &m);
  for(i = 1; i <= n; ++ i)
  {
    scanf("%d", &a);
    update(i, a);
  }
  for(i = 1; i <= m; ++ i)
  {
    scanf("%d%d%d", &a, &b, &c);
    if(! a)
      update(b, -c);
    else
    {
      a = query(c);
      printf("%d\n", (query(c) - query(b - 1)));
    }
  }
  return 0;
}