Pagini recente » Istoria paginii runda/dasdad/clasament | Cod sursa (job #3003414) | Cod sursa (job #1362667) | Cod sursa (job #667397) | Cod sursa (job #2225617)
#include <stdio.h>
//#include <stdlib.h>
void readfrom(int *a, int b[100002][4], int *n, int *m)
{
FILE *f; int i, j;
f = fopen("datorii.in", "r");
fscanf(f, "%d %d", n, m);
for (i = 0; i < *n; i++)
fscanf(f, "%d", &a[i]);
for (i = 0; i < *m; i++)
{
for (j = 1; j <= 3; j++)
fscanf(f, "%d", &b[i][j]);
}
fclose(f);
}
int ft_abs(int c)
{
if (c < 0) c = c * (-1);
return (c);
}
void update_tree(int *c, int n, int index, int val)
{
index = index + 1;
while (index <= n)
{
c[index] += val;
index += index & (-index);
}
}
int get_sum(int *c, int index)
{
int sum = 0;
index++;
while (index > 0)
{
sum += c[index];
index -= index & (-index);
}
return (sum);
}
int main()
{
int a[15002], b[100002][4], c[15003]; int n, m, i;
readfrom(a, b, &n, &m);
for (i = 1; i < n + 1; i++)
c[i] = 0;
for (i = 0; i < n; i++)
update_tree(c, n + 1, i, a[i]);
FILE *g;
g = fopen("datorii.out", "w");
for (int i = 0; i < m; i++)
{
if (b[i][1] == 0)
{
update_tree(c, n, b[i][2] - 1, -b[i][3]);
}
else
{
fprintf(g, "%d\n", ft_abs(get_sum(c, b[i][2] - 2) - get_sum(c, b[i][3])));
}
}
fclose(g);
return (0);
}