`
wanghailiang333
  • 浏览: 199040 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

c/c++树状数组

阅读更多

今天在看程序竞赛的书,看到一段代码,是说树状数组的,书上讲得不怎么清楚,

 

自己也不是很理解,只知道可以这样用,但怎么构造成一个树就不是很明白了,希望大家指点一下。

 

数组:c[MAX];

函数:lowbit(int),insert(int),getsum(int);

 

代码如下:

 

#include <iostream>
#include <cstring>
#include <fstream>
using namespace std;

const int MAX = 1000;

int c[MAX];

int lowbit(int a){
	return a & -a;
}

void insert(int a,int d,int max){
	while(a<=max){
		c[a] += d;
		a += lowbit(a);     //不是很明白这样做的意思
	}
}

long getsum(int a){
	int t = 0;
	while(a > 0){
		t += c[a];
		a -= lowbit(a);
	}
	return t;
}

int main(){
	ifstream cin("E:\\test.txt");

	memset(c , 0 , sizeof(c));

	int n ,i;
	cin>>n;

	for(i=1; i<=n ; i++){
		insert(i,1,n);
	}

	insert(5,-2,n);
	
	for(i=1; i<=n ; i++){
		printf("%d ",getsum(i));
	}

	printf("\n");

	return 0;
}
 
分享到:
评论

相关推荐

    C/C++ 数据结构

    二叉树是最简单的树形结构,每个节点最多有两个子节点。平衡树则通过保持高度平衡,确保了查找、插入和删除操作的高效性。 在这些源码中,你可以学习到如何在C/C++中创建和操作这些数据结构,这对于理解数据结构的...

    算法NOIP树状数组校门外的树.pdf

    树状数组的核心思想是通过特定的二进制索引操作,将一个一维数组转化为类似树形的数据结构,进而利用这种结构简化更新和查询操作。 在树状数组中,我们不直接维护前缀和数组S[],而是将其划分为若干个小区间和,并...

    树状数组资料

    树状数组,也被称为线段树(Segment Tree),是一种数据结构,主要应用于处理区间查询与更新问题,在计算机科学,特别是算法竞赛(如ACM/ICPC)中有着广泛的应用。这个压缩包文件“树状数组资料”很可能包含了关于...

    acm 树状数组讲解

    假设我们有一个数组`A = [1, 2, 3, 4, 5, 6, 7, 8]`,现在我们要构造对应的树状数组`C`,并通过树状数组来进行单点更新和前缀和查询。 1. **初始化树状数组**: ```c++ int A[] = {1, 2, 3, 4, 5, 6, 7, 8}; int...

    数据结构c/c++源代码

    8. **堆**:堆是一种特殊的树形数据结构,满足堆属性(父节点的值大于或小于其子节点)。最大堆和最小堆常用于优先队列的实现。 9. **散列表**:散列表(也称为哈希表)使用哈希函数将键映射到数组索引,提供快速的...

    c/c++数据结构学习题库

    8. **堆**:堆是一种特殊的树形数据结构,满足最大堆或最小堆性质,常用于优先队列的实现。 9. **排序和查找算法**:快速排序、归并排序、冒泡排序、二分查找等是数据结构中常见的算法,它们直接影响到程序的运行...

    基于C/C++的数据结构ADT演示系统

    5. **二叉树**:二叉树是每个节点最多有两个子节点的树形结构,常用于搜索和排序。这个系统可能包括了二叉树的创建、遍历(前序、中序、后序)、插入、删除等功能。 6. **图**:图由顶点和边组成,可以表示各种关系...

    数据结构(c/c++语言版)课件下载

    二叉树是最简单的树形结构,每个节点最多有两个子节点,分为左子节点和右子节点。二叉树有多种类型,如满二叉树、完全二叉树和平衡二叉树,它们在搜索、排序和文件系统中有广泛的应用。 第4章可能会讲解图,这是一...

    Master LeetCode C/C++

    递归往往用于处理树形结构或层次遍历的问题,而回溯法则常用于解决组合优化问题,如八皇后问题、N皇后问题等。 最后,LeetCode的挑战不仅仅是算法,还有良好的代码风格和时间空间复杂度分析。编写清晰、简洁的代码...

    C/C++全排列

    全排列的问题可以看作是搜索一个树形结构的叶子节点,其中每个节点代表一种排列。 在C/C++中,我们通常使用递归或回溯算法来解决全排列问题。递归是一种函数自我调用的方法,而回溯则是当遇到无效解或目标状态时,...

    C/C++数据结构

    5. **堆**:堆是一种特殊的树形数据结构,通常用于优先队列的实现。它可以是最大堆(根节点大于或等于所有子节点)或最小堆(根节点小于或等于所有子节点)。C++标准库没有内置的堆类,但可以使用`&lt;algorithm&gt;`中的`...

    数据结构算法锦集_C/C++

    二叉树是最基础的树形结构,通常用于查找和排序;平衡树则保证了操作的高效性。 6. **图**:图由顶点和边构成,用于表示对象之间的关系。图的遍历(深度优先搜索、广度优先搜索)和最短路径算法(Dijkstra、Floyd-...

    C/C++中常用的单词

    在C/C++编程中,常见的数据结构包括数组、链表、栈、队列、树、图等。 #### Algorithm 算法 算法是指解决问题的一系列明确步骤或指令集。它是计算机程序的核心,用于指导如何处理输入并生成期望的输出。良好的算法...

    bit.cpp(树状数组基本框架)

    含义其实就是用一个数组,构成树形结构来维护原数组的前缀和。 显然,对于树状数组C,C[I]对应“管辖”多少个元素,与它对应二进制数最右端第一个1的位置有关。这样,就能够达到询问一个区间的值,或者改变值的时间...

    mianshibaodian.rar_C/C++求职宝典

    - 树形结构:二叉树、平衡树(AVL、红黑树)的操作和性质。 - 图论基础:图的表示、遍历(深度优先、广度优先)和最短路径算法(Dijkstra、Floyd)。 7. 面试题解析: - 编程题:提供常见面试编程题的解题思路和...

    实现trie树的C/C++模板

    Trie树是一种特殊的树形结构,其中每个节点代表字符串中的一个字符。根节点通常不包含任何字符信息,而树的边则标记有字符。从根节点到任意叶子节点路径上的字符序列组成一个字符串,该字符串存储在树中。 #### ...

    c/c++精华合集

    - 树形结构:二叉树的遍历(前序、中序、后序)、平衡树(AVL、红黑树)的性质和操作。 - 回溯与贪心策略:在解决组合优化问题时的应用。 4. **题目解答**: - 竞赛编程题目:从ACM/ICPC到LeetCode,涵盖了各种...

    树状数组(C++版).docx

    树状数组,也称为线段树(Segment Tree),是一种数据结构,主要应用于处理动态更新数组以及求解区间元素和的问题。它的核心思想是利用分治策略,将一个大问题分解成若干个小问题来解决,从而达到高效计算的目的。在...

    树状数组(C++版).pdf

    树状数组,也称为二分索引树或BIT(Binary Indexed Tree),是一种数据结构,主要用于高效地处理动态数组上的区间查询和修改操作。在C++中,它通常用于实现对数组中某个区间元素求和的问题,同时保持高效的更新和...

Global site tag (gtag.js) - Google Analytics