线段树整理
仅用于个人复习 有问题还望指出 线段树 是一个基于二分思想的一种二叉搜索树 能在 log2(n) 的时间内 完成更新和查找操作 其中 线段树有以下操作 1.建树 线段树的模板大都是固定的 最为重要的是 应该明确用线段树来维护什么信息 也就是你得到答案需要的信息 明确了这个信息之后 之后的操作就会显得行云流水 struct node ///结构体保存信息 { int l , r , ans ; } t [ maxn * 4 ] ; void build ( int v , int l , int r ) { t [ v ] . l = l ; t [ v ] . r = r ; if ( l == r ) { scanf ( "%d" , & t [ v ] . ans ) ; return ; } int mid = ( l + r ) / 2 ; build ( 2 * v , l , mid ) ; //建立左子树 build ( 2 * v + 1 , mid + 1 , r ) ; //右子树 t [ v ] . ans = max ( t [ v * 2 ] . ans , t [ v * 2 + 1 ] . ans ) ; ///更新最大值 } 左子树和右子树 也可以使用位运算的版本 分别为 v<<1 和 v<<1|1 线段树的内存一般要开大4倍左右