线段树

最近做了好几题线段树的题目,

对线段树也有了更深的了解.

线段树概念:

线段树是建立在线段的基础上,每个结点都代表了一条线段[a , b]。长度为1的线段称为元线段。非元线段都有两个子结点,左结点代表的线段为[a , (a + b ) / 2],右结点代表的线段为[( a + b ) / 2 , b]。

 

线段树结构如下:

包含左右边界(范围)值,

其他的节点信息则视具体题目而定,

这也是线段树精华之所在,

根据不同的题目, 在节点中增加不同的信息,

然后动态的维护/查询.

 

一般线段树包含下面3个操作:

(1).built: 建树

(2).update: 更新

(3).find: 查询

(4).insert: 插入

(5).delete: 删除

 由线段树的定义可知, 线段树其实就是一颗完全二叉树,

所以建树时间复杂度为O(n), 其他操作的时间复杂度均O(Log n).

 

练习:

poj 2777 Count Color

http://poj.org/problem?id=2777

注意更新操作.

 

poj 3468  A Simple Problem with Integers

http://poj.org/problem?id=3468

注意下数值的取值范围就好了.

 

poj 3277 City Horizon

http://poj.org/problem?id=3277

(1 ≤ Ai < Bi ≤ 1,000,000,000)所以需要离散化,

离散化的方法是: 把所有A,B的值先剔重然后排序, 将排序后的1-N个数映射到线段树中.

ps: 貌似这题数组要开4倍以上, 我开4倍RE了.....

 

poj 2832 Sliding Window

http://poj.org/problem?id=2823

ps: 跑了7469MS, 囧

其他的题目:poj2828 poj2812.....

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值