Pagini recente » Cod sursa (job #1136682) | Cod sursa (job #2970954) | Cod sursa (job #3278149) | Cod sursa (job #1445789) | Cod sursa (job #2910378)
#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';
}
}