洛谷P1020(NOIP1999普及组)导弹拦截 最长上升子序列 贪心算法 二分查找
发布时间
阅读量:
阅读量
1、 题目先要输出数列的最长非上升子序列,套用模板 :LIS 模板就可。
先把数组 reverse 一下,在用 std::upper_bound
2、 加入 数组 h[] = {90, 103, 99, 83, 102, 70, 86, 70, 99, 71}
依次扫描,用若干条队列模拟 最长非上升子序列
首先 h[1] = 90 , 新建一条 队列,然后扫描 h[2] = 103 , 因为 103 > 90,
103 不能排在90所在的队列。 此时, 已经有 2 条队列
队列 1 : 90
队列 2 : 103
现在 h[3] = 99 要进入对应的队列, 需要用二分查找,找到目前所有队列中,
最后一个元素, 第一个 大于等于 99的队列的下标(显然是队列2), 99 插入队列2
然后 ,队列数据变为:
队列 1 : 90
队列 2 : 103, 99 // 用数组 last_h[i] 表示队列最后一个元素的值
显然 last_h[1] = 90, last_h[2] = 99, 现在 h[4] = 83 进队, 相应的变为:
队列 1 : 90, 83
队列 2 : 103, 99, //last_h
全部评论 (0)
还没有任何评论哟~
