概述
1.目的要求:
(1)理解树状数组的树形结构以及lowbit函数
(2)理解树形结构的计算方法对于计算效率的提升,例如最经典的RMQ问题
(3)利用树状数组解决Online Judge上面的题目
2.实验内容:
(1)经典区间和RMQ问题:有n个星星节点,存在星星节点左下角(包括正左和正下)的其他星星节点,则该星星节点比它左下角的星星节点大,level 0表示该星星节点没有比他还小的节点,level 1表示存在一个比该星星节点小的点。输出统计好的每个level等级存在多少星星节点 -来源HDU1285
3.实验报告:
(1)
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
const int MAXN=15010;
const int MAXX=32010;
int c[MAXX];//树状数组的c数组
int cnt[MAXN];//统计结果
int lowbit(int x)
{
return x&(-x);
}
void add(int i,int val)
{
while(i<=MAXX)
{
c[i]+=val;
i+=lowbit(i);
}
}
int sum(int i)
{
int s=0;
while(i>0)
{
s+=c[i];
i-=lowbit(i);
}
return s;
}
int main()
{
int n;
int x,y;
while(scanf("%d",&n)!=EOF)
{
memset(c,0,sizeof(c));
memset(cnt,0,sizeof(cnt));
for(int i=0;i<n;i++)
{
scanf("%d%d",&x,&y);
int temp=sum(x+1); //加入x+1,是为了避免0,X是可能为0的
cnt[temp]++;
add(x+1,1);
}
for(int i=0;i<n;i++)
{
printf("%dn",cnt[i]);
}
}
return 0;
}
最后
以上就是光亮蜡烛为你收集整理的训练八 树状数组的全部内容,希望文章能够帮你解决训练八 树状数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复