摘要: "题目" 发现是顺次插入的,于是很好做 设$dp_i$表示$i$结尾的$LIS$,每次插入一个数找到之前的最大的$dp_j$加一就好了 至于如何找到这个元素应该在的位置,可以考虑类似区间提取的方法 如何要在$x$位置后面插入一个元素的话我们就先将$x$转到根,$x+1$转成根的右儿子,$x+1$的位 阅读全文
posted @ 2019-02-11 21:21 asuldb 阅读(137) 评论(0) 推荐(0) 编辑
摘要: "题目" 刚开始并没有看懂题意于是痛苦的挣扎了好久 题意是这样的 问$[l,r]$有多少对$(i,j)$满足$a_i$和$a_j$恰好是$a_i...a_j$中严格最大的两个数 强制在线 先考虑$a_j$是$a_i...a_j$严格第二大的那一个 我们可以一个单调栈扫过去找到$j$之前第一个大于等于 阅读全文
posted @ 2019-02-11 16:19 asuldb 阅读(156) 评论(0) 推荐(0) 编辑
摘要: "题目" 发现需要一个$O(n\sum a_i )$的做法 于是可以直接做一个背包,$dp[i]$表示和为$i$的子集是否有奇数种 $bitset$优化一下就好了 cpp include include include include include define maxn define re re 阅读全文
posted @ 2019-02-11 16:08 asuldb 阅读(276) 评论(0) 推荐(0) 编辑