Pagini recente » Cod sursa (job #335667) | Cod sursa (job #2328157) | Cod sursa (job #2740965) | Cod sursa (job #1449278) | Cod sursa (job #2902721)
#include <fstream>
std::ifstream cin("datorii.in");
std::ofstream cout("datorii.out");
const int MAXN = 15001;
int arr[MAXN], tree[4 * MAXN], n, m, i, x, y, op;
void buildTree(int left, int right, int pos)
{
if (left == right)
{
tree[pos] = arr[left];
return;
}
int mid = left + (right - left) / 2;
buildTree(left, mid, 2 * pos);
buildTree(mid + 1, right, 2 * pos + 1);
tree[pos] = tree[2 * pos] + tree[2 * pos + 1];
}
void updateTree(int left, int right, int pos)
{
if (left == right)
{
tree[pos] = arr[i];
return;
}
int mid = left + (right - left) / 2;
if (i <= mid)
updateTree(left, mid, 2 * pos);
else
updateTree(mid + 1, right, 2 * pos + 1);
tree[pos] = tree[2 * pos] + tree[2 * pos + 1];
}
int sumTree(int left, int right, int pos)
{
if (x <= left && y >= right)
return tree[pos];
if (x > right || y < left)
return 0;
int mid = left + (right - left) / 2;
return sumTree(left, mid, 2 * pos) + sumTree(mid + 1, right, 2 * pos + 1);
}
int main()
{
cin >> n >> m;
for (i = 1; i <= n; i++)
cin >> arr[i];
buildTree(1, n, 1);
for (int j = 1; j <= m; j++)
{
cin >> op >> x >> y;
if (op == 1)
cout << sumTree(1, n, 1) << '\n';
if (op == 0)
{
i = x;
arr[i] -= y;
updateTree(1, n, 1);
}
}
return 0;
}