Pagini recente » Cod sursa (job #2877992) | Cod sursa (job #1818059) | Cod sursa (job #2035918) | Cod sursa (job #2221814) | Cod sursa (job #781282)
Cod sursa(job #781282)
#include <cstdio>
const unsigned int MAX_SIZE(15001);
int bit [MAX_SIZE];
inline int lsb (const int number)
{
return number & -number;
}
inline void bit_init (int index, int value, const int size)
{
do
{
bit[index] += value;
index += lsb(index);
}
while (index <= size);
}
inline void bit_update (int index, int value, const int size)
{
do
{
bit[index] -= value;
index += lsb(index);
}
while (index <= size);
}
inline int bit_sum (int index, const int size)
{
int sum(bit[index]);
index -= lsb(index);
while (index > 0)
{
sum += bit[index];
index -= lsb(index);
}
return sum;
}
int main (void)
{
std::freopen("datorii.in","r",stdin);
std::freopen("datorii.out","w",stdout);
int n, m;
std::scanf("%d%d",&n,&m);
int a, *a_ptr(&a);
{
int counter(1);
do
{
std::scanf("%u",a_ptr);
bit_init(counter,a,n);
++counter;
}
while (counter <= n);
}
char operation, *operation_ptr(&operation);
int b, *b_ptr(&b);
do
{
std::scanf("\n%c%d%d",operation_ptr,a_ptr,b_ptr);
if (operation == '0')
bit_update(a,b,n);
else
std::printf("%d\n",bit_sum(b,n) - bit_sum(a - 1,n));
--m;
}
while (m);
std::fclose(stdin);
std::fclose(stdout);
return 0;
}