Pagini recente » Cod sursa (job #3030329) | Cod sursa (job #2190438) | Cod sursa (job #361706) | Cod sursa (job #413430) | Cod sursa (job #294790)
Cod sursa(job #294790)
#include <stdio.h>
#define zeros(x) ((x ^ (x - 1)) & x)
int n, sum;
int aib[15010];
void solve();
void update(int, int);
void query(int, int);
int main()
{
solve();
return 0;
}
void update(int pos, int val)
{
int i;
for (i = pos; i <= n; i += zeros(i))
{
aib[i] += val;
}
}
void query(int st, int dr)
{
if (st == 1)
{
int i;
for (i = dr; i >= 1; i -= zeros(i))
{
sum += aib[i];
}
}
else
{
query(1, st - 1);
sum = -sum;
query(1, dr);
}
}
void solve()
{
int m, i, x, y, z;
FILE *fin = fopen("datorii.in", "r");
FILE *fout = fopen("datorii.out", "w");
fscanf(fin, "%d%d", &n, &m);
for (i = 1; i <= n; ++i)
{
fscanf(fin, "%d", &x);
update(i, x);
}
for (i = 1; i <= m; ++i)
{
fscanf(fin, "%d%d%d", &x, &y, &z);
if (x)
{
sum = 0;
query(y, z);
fprintf(fout, "%d\n", sum);
}
else
{
update(y, -z); //scad valoarea z din ziua y
}
}
fclose(fin);
fclose(fout);
}