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