Pagini recente » Cod sursa (job #667825) | Cod sursa (job #2695630) | Cod sursa (job #125902) | Cod sursa (job #706767) | Cod sursa (job #112888)
Cod sursa(job #112888)
#include <fstream.h>
int c[20], v[20], n, m, i, j;
void modif(int ind, int val, char ok)
{
int poz, put;
poz = 0;
put = 1;
while (ind <= n)
{
if (ok == '+')
c[ind] += val;
else
c[ind] -= val;
while ((ind & put) == 0)
{
poz++;
put *= 2;
}
ind += put;
}
}
int suma(int st, int dr)
{
int s1, s2, poz, put;
// prima suma:
s1 = 0;
poz = 0;
put = 1;
while (dr > 0)
{
s1 += c[dr];
while ((dr & put) == 0)
{
poz++;
put *= 2;
}
dr -= put;
}
// a doua suma:
s2 = 0;
poz = 0;
put = 1; st--;
while (st > 0)
{
s2 += c[st];
while ((st & put) == 0)
{
poz++;
put *= 2;
}
st -= put;
}
// calculare suma finala:
return s1-s2;
}
/*void constr_aib()
{
int poz, put;
for (i=1; i<=n; i++)
{
j = i; poz = 0; put = 1;
while (j & put == 0)
{
poz++;
put *= 2;
}
}
} */
int main()
{
ifstream fin("datorii.in");
ofstream fout("datorii.out");
fin >> n >> m;
for (i=1; i<=n; i++)
{
fin >> v[i];
modif(i, v[i], '+');
}
int x, a, b;
for (j=1; j<=m; j++)
{
fin >> x;
if (x == 1)
{
fin >> a >> b;
fout << suma(a, b) << '\n';
}
else
{
fin >> a >> b;
modif(a, b, '-');
}
}
fin.close();
fout.close();
return 0;
}