搜索
您的当前位置:首页正文

任意区间的最长连续递增子序列,最大连续子序列和

来源:小奈知识网

hdu3308

给n个数,有m个操作

U a b 表示将第a个数改成b

Q a b 表示询问区间[a,b]的最长连续递增子序列。

区间询问问题且带修改,一般是用线段树来解决

那么要维护

Llen[rt], Lval[rt][2] 表示rt所对应的区间[l,r] 以l开头的最长连续递增子序列的长度, Lval[rt][0]表示子序列的最左边的值,Lval[rt][1]表示子序列最右边的值

Rlen[rt],Rval[rt][2]  表示rt所对应的区间[l,r]以r结尾的最长连续递增子序列的长度, Rval[rt][0] 表示子序列最左边的值,Rval[rt][1]表示子序列最右边的值

Mlen[rt] 表示rt所对应的区间[l,r]最长连续递增子序列的长度

 

那么Llen[rt] 可能是左区间的Llen[rt<<1]  ,也有可能是跨越左右两个孩子

Rlen[rt] 可能是右区间的Rlen[rt<<1|1],  页有可能是跨越左右两个孩子

Mlen[rt] 可能是左区间的Mlen[rt<<1],或者右区间的Mlen[rt<<1|1], 也有可能跨越左右两个区间

上面的状态转移时,也要注意一下val的改变。

具体的转移见代码

 

同理,最大连续子序列和,和上面的思路差不多

更难一点的题目就是把上述的两个问题放到树上,  那么就要用到树链剖分。

 

转载于:https://www.cnblogs.com/justPassBy/p/4852504.html

因篇幅问题不能全部显示,请点此查看更多更全内容

Top