2011年11月15日
摘要: UVA_10534 这个题目需要用到nlogn求最长上升子序列的算法。 算法的思想大概是这个样子,维护一个栈,在扫描过程中,如果当前元素比栈顶元素大,那么就将其加入到栈顶,否则在栈内用二分查找找到恰好不小于当前元素的某一值,并将其替换掉。当前元素为终点的最长上升子序列的长度就是该元素入栈时的位置。 实际上就是运用了贪心的思想,每次进行替换操作后增强了后续最长上升子序列的“长度增长的潜力”,后续得到的解一定不会比不替换更优。 简单证明一下其正确性。我们用a[i]替换掉了S[mid],对后续某一元素a[j]来讲,可能会认为此时a[j]前的元素标号并不是严格升序了,这会不会有问题呢?实际是不... 阅读全文
posted @ 2011-11-15 01:17 Staginner 阅读(439) 评论(0) 推荐(0) 编辑