hdu 3308 LCIS (线段树)

题意不难理解   就是求某一区间的最长连续递增子序列。

虽然猜测是线段树做法,但是之前没见过类似题目。    所以搜了下解题报告。


对于某一区间 ,我们保存以从该区最左边点为起点的最长子序列长度,和以该区间最右边的点为终点的最长子序列,以及该区间的最长子序列。

 

对于中点mid 如果a[mid]>=a[mid+1] 断开 那么有左边最长=左儿子左边最长 右边最长=右儿子右边最长 全局最长=Max(两个儿子的全局最长)

 

如果是连起来的a[mid]<a[mid+1] 那么在以上基础上更新 如果左边最长=左儿子长度(表示左半全不是最长递增子序列) 那么左边最长+=右儿子左边最长 同理如果右边最长=右儿子长度 那么右边最长+=左儿子右边最长

 

同时用左儿子右边最长+右儿子左边最长更新全局最长(中间连起来的)

 

最后查询的时候也有一点需要注意。

 

如果  对于某一区间   s<=mid &&e>mid  而且满足 a[mid]<a[mid+1]

中间长度并不是   左儿子右边最长+右儿子左边最长

该长度为   min(mid - s +1,tree[(i<<1)].mr)  + min(e-mid,tree[(i<<1)|1].ml)

 


 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值