樹状配列学習の心得

672 ワード

古いルール、コードを見て
/*            1,  lowbit(0)      */
#include "iostream"
#include "cstdio"
using namespace std;
int a[100001],c[100001],n;
int lowbit(int x)//    ,      
{
	return (x&(-x));
}
void init()//      
{
	int i,j;
	for(i=1;i<=n;i++)
		for(j=i;j<=n;j+=lowbit(j))
			c[j]+=a[i];
}
void p()//  
{
	int i;
	for(i=1;i<=n;i++)
		printf("%d ",c[i]);
}
int sum(int k)//  
{
	int s=0;
	while(k>0)
	{
		s+=c[k];
		k-=lowbit(k);
	}
	return s;
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=1;i<=n;i++)
		scanf("%d",&a[i]);
	init();
	p();
	printf("%d
",sum(n)); return 0; }