线段树有关的操作(先大体上知道什么意思):
1
2
3
4
5
线段树前置知识:
由于线段树是一个完美二叉树,所以我们选择的是一维数组来存储线段树的相关知识:
所以:
1如果一个结点是X,则父节点、左儿子、右儿子:
2线段树最多有几个点:tr[4 * n]:
具体操作及实现:
1.build(int u,int l,int r):
如图:
所以对于根节点tr[1],tr[1].l = 1,tr[1].r = 10;
建立的过程非常简单,就是对于上图的一个代码描述,如果有疑惑可以这个代码:(也是非常帮助我们理解递归的一个代码):
#include<iostream>
using namespace std;
const int N = 110;
struct tree{
	int l;
	int r;
}tr[N];
void build(int u,int L,int R){
	tr[u].l = L,tr[u].r = R;
	if(L == R) return ;
	int mid =( L + R )>> 1;
	build(u << 1,L,mid),build(u << 1 | 1,mid + 1,R);
//一般是在这里加上push_up()的操作
}
int main(){
	build(1,1,10);
	
	for(int i = 1;i <= 40;i ++){
		cout << tr[i].l << " " << tr[i].r << endl;
	}
	
	return 0;
}


















