Pagini recente » Cod sursa (job #3282880) | Cod sursa (job #434831) | Cod sursa (job #244572) | Cod sursa (job #257725) | Cod sursa (job #191857)
Cod sursa(job #191857)
#include <cstdio>
using namespace std;
void change(int poz, int maxpoz, int val, int array[])
{
while (poz <= maxpoz) {
array[poz] += val;
poz += -poz & poz;
}
}
int sum(int poz, int array[])
{
int s;
s = 0;
while (poz > 0) {
s += array[poz];
poz = (-poz & poz) ^ poz;
}
return s;
}
int main()
{
int aib[15001] = {}, n, m, x, y, z, s1, s2, k, i;
FILE *f1, *f2;
f1 = fopen("datorii.in", "r");
f2 = fopen("datorii.out", "w");
fscanf(f1, "%d%d", &n, &m);
for (i = 1; i <= n; ++i) {
fscanf(f1, "%d", &x);
k = i;
while (k <= n) {
aib[k] += x;
k += -k & k;
}
}
for (i = 1; i <= m; ++i) {
fscanf(f1, "%d%d%d", &x, &y, &z);
if (x) //suma
fprintf(f2, "%d\n", sum(z, aib) - sum(y - 1, aib));
else //achitare
change(y, n, -z, aib);
}
fclose(f1);
fclose(f2);
return 0;
}