Cod sursa(job #2582156)

Utilizator vladcainamisirVlad Cainamisir vladcainamisir Data 16 martie 2020 14:17:49
Problema Datorii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include<cstdio>
const int NMAX = 15000;
int aib[NMAX + 5];
int sp[NMAX + 5];
int maxval;
int lsb(int nr)
{
  return (nr & (-nr));
}
void update(int index , int val)
{
  while(index <= maxval)
  {
    aib[index] += val;
    index += lsb(index);
  }
}
int query(int index)
{
  int total = 0;
  while(index)
  {
    total += aib[index];
    index -= lsb(index);
  }
  return total;
}
int main()
{
  int n , m  , nr;
  freopen("datorii.in" , "r" , stdin);
  freopen("datorii.out" , "w" , stdout);
  scanf("%d%d", &n , &m);
  maxval = n + 1;
  for(int i = 1; i <= n ; i ++){
    scanf("%d" , &nr);
    sp[i] = sp[i - 1] + nr;
  }
  for(int i = 1; i <= m ; i ++)
  {
    int tip , a , b;
    scanf("%d%d%d" , &tip , &a , &b);
    if(tip == 0)
    {
      update(a , b);
    }
    else
    {
      printf("%d\n" , sp[b] - sp[a - 1] - query(b) - query(a - 1));
    }
  }
  return 0;
}