题意不难理解 就是求某一区间的最长连续递增子序列。
虽然猜测是线段树做法,但是之前没见过类似题目。 所以搜了下解题报告。
对于某一区间 ,我们保存以从该区最左边点为起点的最长子序列长度,和以该区间最右边的点为终点的最长子序列,以及该区间的最长子序列。
对于中点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)