Pagini recente » Cod sursa (job #290227) | Cod sursa (job #2101954) | Cod sursa (job #876478) | Cod sursa (job #2284322) | Cod sursa (job #2939235)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("datorii.in");
ofstream fout("datorii.out");
int n, q;
vector<int> A;
struct BinaryIndexedTree
{
vector<int> bit;
void init()
{
bit.assign(n + 1, 0);
for (int i = 1; i <= n; i++)
{
add(i, A[i]);
}
}
void add(int idx, int value)
{
while (idx <= n)
{
bit[idx] += value;
idx += (idx & (-idx));
}
}
int sum(int idx)
{
int total = 0;
while (idx > 0)
{
total += bit[idx];
idx -= (idx & (-idx));
}
return total;
}
int range_sum(int left, int right)
{
return sum(right) - sum(left - 1);
}
} BIT;
int main()
{
fin >> n >> q;
A.assign(n + 1, 0);
for (int i = 1; i <= n; i++)
{
fin >> A[i];
}
BIT.init();
for (int i = 1; i <= q; i++)
{
int tip;
fin >> tip;
if (tip == 0)
{
int idx, value;
fin >> idx >> value;
BIT.add(idx, -value);
}
else
{
int left, right;
fin >> left >> right;
fout << BIT.range_sum(left, right) << '\n';
}
}
return 0;
}