Cod sursa(job #2910378)

Utilizator ezluciPirtac Eduard ezluci Data 20 iunie 2022 11:32:21
Problema Datorii Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <bits/stdc++.h>
#define lsb(x) (x & -x)
using namespace std;
ifstream fin ("datorii.in");
ofstream fout ("datorii.out");

const int nMAX = 15e3;

int n, m;
int aib[nMAX + 1];

void buildAIB()
{
   for (int i = 1; i <= n; ++i)
      if (i + lsb(i) <= n)
         aib[i + lsb(i)] += aib[i];
}

void updateAIB(int pos, int val)
{
   for (; pos <= n; pos += lsb(pos))
      aib[pos] -= val;
}

int sumAIB(int ri)
{
   int sum = 0;
   for (; ri >= 1; ri -= lsb(ri))
      sum += aib[ri];
   return sum;
}

int queryAIB(int le, int ri)
{
   return sumAIB(ri) - sumAIB(le-1);
}

int main()
{
   fin >> n >> m;
   for (int i = 1; i <= n; ++i)
      fin >> aib[i];

   buildAIB();

   for (int i = 1; i <= m; ++i)
   {
      int op, a, b;
      fin >> op >> a >> b;

      if (op == 0)
         updateAIB(a, b);
      else
         fout << queryAIB(a, b) << '\n';
   }
}