线段树操作

区间求和
区间最大值
序列区间的最大子段和

inline void up(int p){
	tree[p].sum=tree[ls].sum+tree[rs].sum; //维护区间总和
	tree[p].ll=max(tree[ls].ll,tree[ls].sum+tree[rs].ll);
//左端点的最大子段和可能为左儿子的左端点最大子段和,也可能为左儿子区间和 和右儿子左端点最大子段和拼起来的最大子段和
	tree[p].lr=max(tree[rs].lr,tree[rs].sum+tree[ls].lr);
//右端点最大子段和同理
	tree[p].lm=max(tree[ls].lr+tree[rs].ll,max(tree[ls].lm,tree[rs].lm));
//中间的最大子段和可能为左/右儿子中间的的最大子段和,也可能为左右儿子拼起来的和
}

慢慢有空补

你可能感兴趣的:(线段树操作)