Pagini recente » Cod sursa (job #174999) | Cod sursa (job #167292) | Cod sursa (job #3275350) | Cod sursa (job #3242108) | Cod sursa (job #523663)
Cod sursa(job #523663)
#include <cstdio>
#define DIM 15005
int arb[DIM],n, m;
void modifica(int ind, int val)
{
int poz = 0;
while (ind <= n)
{
arb[ind] += val;
while ((ind & (1<<poz)) == 0)
++poz;
ind += (1<<poz);
++poz;
}
}
int suma(int st, int dr)
{
int s1 = 0, poz = 0;
while (dr > 0)
{
s1 += arb[dr];
while ((dr & (1<<poz)) == 0)
++poz;
dr -= (1<<poz);
++poz;
}
int s2 = 0;
poz = 0;
--st;
while (st > 0)
{
s2 += arb[st];
while ((st & (1<<poz)) == 0)
++poz;
st -= (1<<poz);
++poz;
}
return s1-s2;
}
void afis()
{
for (int i = 1; i <= n; ++i)
printf("%3d ", i);
printf("\n");
for (int i = 1; i <= n; ++i)
printf("%3d ", arb[i]);
printf("\n");
printf("||==================||\n");
}
int main()
{
FILE *f = fopen("datorii.in", "r");
fscanf(f, "%d%d", &n, &m);
for (int i = 1, val; i <= n; ++i)
fscanf(f, "%d", &val), modifica(i, val);
afis();
FILE *out = fopen("datorii.out", "w");
for (int type, a, b;m;--m)
{
fscanf(f, "%d%d%d", &type, &a, &b);
if (type == 0)
modifica(a, -b), afis();
else
fprintf(out, "%d\n", suma(a, b));
}
fclose(f);
fclose(out);
return 0;
}