#include <stdio.h>
#include <stdlib.h>
#define MAX 1000000
int BIT[MAX+1] = {0};
void makeBIT(int array[], int size)
{
int lenBIT = size + 1;
int i;
for (i = 1; i < lenBIT; ++i)
{
BIT[i] += array[i-1];
int k = i;
while (k < lenBIT)
{
k += (k & -k);
BIT[k] += array[i-1];
}
}
}
void increment(int value, int idx, int size, int BIT[])
{
int lenBIT = size + 1;
int i = idx + 1;
while (i < lenBIT)
{
BIT[i] += value;
i += (i & -i);
}
}
int query(int idx, int BIT[])
{
int i = idx + 1;
int sum = 0;
while (i)
{
sum += BIT[i];
i -= (i & -i);
}
return sum;
}
int main (void)
{
int array[] = {1, 2, 3, 4 , 5, 6};
int i;
makeBIT(array, 6);
for (i = 1; i <= 6; ++i)
for (i = 1; i < 7; ++i)
printf ("%d\n", query
(i
, BIT
)); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2RlZmluZSBNQVggMTAwMDAwMAppbnQgQklUW01BWCsxXSA9IHswfTsKdm9pZCBtYWtlQklUKGludCBhcnJheVtdLCBpbnQgc2l6ZSkKewoJaW50IGxlbkJJVCA9IHNpemUgKyAxOwoJaW50IGk7Cglmb3IgKGkgPSAxOyBpIDwgbGVuQklUOyArK2kpCgl7CgkJQklUW2ldICs9IGFycmF5W2ktMV07CgkJaW50IGsgPSBpOwoJCXdoaWxlIChrIDwgbGVuQklUKQoJCXsKCQkJayArPSAoayAmIC1rKTsKCQkJQklUW2tdICs9IGFycmF5W2ktMV07CgkJfQoJfQkJCn0Kdm9pZCBpbmNyZW1lbnQoaW50IHZhbHVlLCBpbnQgaWR4LCBpbnQgc2l6ZSwgaW50IEJJVFtdKQp7CglpbnQgbGVuQklUID0gc2l6ZSArIDE7CglpbnQgaSA9IGlkeCArIDE7Cgl3aGlsZSAoaSA8IGxlbkJJVCkKCXsKCQlCSVRbaV0gKz0gdmFsdWU7CgkJaSArPSAoaSAmIC1pKTsKCX0KfQppbnQgcXVlcnkoaW50IGlkeCwgaW50IEJJVFtdKQp7CglpbnQgaSA9IGlkeCArIDE7CglpbnQgc3VtID0gMDsKCXdoaWxlIChpKQoJewoJCXN1bSArPSBCSVRbaV07CgkJaSAtPSAoaSAmIC1pKTsKCX0KCXJldHVybiBzdW07Cn0JCQppbnQgbWFpbiAodm9pZCkKewoJaW50IGFycmF5W10gPSB7MSwgMiwgMywgNCAsIDUsIDZ9OwoJaW50IGk7CgltYWtlQklUKGFycmF5LCA2KTsKCWZvciAoaSA9IDE7IGkgPD0gNjsgKytpKQoJCXByaW50ZiAoIiVkXG4iLCBCSVRbaV0pOwoJcHJpbnRmICgiUXVlcmllc1xuIik7Cglmb3IgKGkgPSAxOyBpIDwgNzsgKytpKQoJCXByaW50ZiAoIiVkXG4iLCBxdWVyeShpLCBCSVQpKTsKCXJldHVybiAwOwp9CQ==