您的位置:首页 > 其它

poj2352树状数组

2015-12-22 20:00 357 查看
最近趁着期末复习的时间看了树状数组,似懂非懂,假期一定要补上一篇树状数组的博客
//AC代码(仿照别人的树状数组的模板过的)
#include <stdio.h>
int c[32005];
int n;
int a[32005];
int lowbit(int x)
{
return x&(-x);
}
void add(int index,int step)//对第index个数进行更改,更改step,注意对之后造成了影响
{
while(index<=32006)
{
c[index]+=step;
index+=lowbit(index);
}
}
int sum(int index)//求到第index之和
{
int sum;
sum=0;
while(index>0)
{
sum+=c[index];
index-=lowbit(index);
}
return sum;
}
int main()
{
int i,c,d;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d%d",&c,&d);
a[sum(++c)]++;//因为树状数组的下标是从1开始的,即前c项之和得到的结果+1
add(c,1);//这个数也加一
}
for (i=0;i<n;i++)
printf("%d\n",a[i]);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: