树状数组基础操作

代码比较简单,但是用途比较受限,不如线段树用途那么广。
更多情况下,树状数组要与其他算法合用(如二分答案、前缀和优化之类的)才能发挥出最大的威力

更新


void add(int x)
{
	while(x<105)
	{
		treep[x]++;
		x+=temp(x);
	}
} 


求和


int sum(int x)
{
	int ans=0;
	while(x>0)
	{
		ans+=treep[x];
		x-=temp(x);
	}
	return ans;
}


取末尾1, 通过x与-x的补码取出最后一位1


int temp(int x)
{
	return x&-x;  //取出尾1 
}


kkk