Pagini recente » Cod sursa (job #1052826) | Cod sursa (job #2951978) | Cod sursa (job #3288094) | Cod sursa (job #3260201) | Cod sursa (job #2907692)
#include <iostream>
FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");
int fenwick[15005];
int n, m;
int biggestPow2;
void addVal(int pos, int val)
{
while (pos <= n)
{
fenwick[pos] += val;
pos += pos & (-pos);
}
}
int getUntilPos(int pos)
{
int pow2 = biggestPow2;
int currentPos = 0;
int result = 0;
while (pow2 != 0)
{
if (currentPos + pow2 <= pos)
{
currentPos += pow2;
result += fenwick[currentPos];
}
pow2 = pow2 / 2;
}
return result;
}
int main()
{
fscanf(fin, "%d %d", &n, &m);
for (int i = 0; i < n; i++)
{
int b;
fscanf(fin, "%d" , &b);
addVal(i + 1, b);
}
biggestPow2 = 1;
while (biggestPow2 <= n)
biggestPow2 = biggestPow2 * 2;
biggestPow2 = biggestPow2 / 2;
for (int i = 0; i < m; i++)
{
int type, a, b;
fscanf(fin, "%d %d %d", &type, &a, &b);
if (type == 0)
addVal(a, -b);
else
fprintf(fout, "%d\n", getUntilPos(b) - getUntilPos(a - 1));
}
}