牛客 最长递增子序列
题目链接: https://www.nowcoder.com/practice/30fb9b3cab9742ecae9acda1c75bf927?tpId=101&tqId=33093&tPage=1&rp=1&ru=/ta/programmer-code-interview-guide&qru=/ta/programmer-code-interview-guide/question-ranking 题目大意 略。 分析 经典 DP,具体怎么 DP 的推荐看左神的书,这里解释一下为什么从后往前不断找第一个 dp[i] 减少并且位于 LIS 上的元素就可以找到字典序最小的 LIS。 下面以样例 2,1,5,3,6,4,8,9,7,5,7,2,3 来演示 smallEnds 数组的更新。 从图中可以直观地看出来,后更新的,并且位于 LIS 路径上的点,一定能取代被它更新的,并且位于 LIS 路径上的点。 代码如下 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define INIT() ios::sync_with_stdio(false);cin.tie(0);cout.tie(0); 5 #define Rep(i,n) for (int i = 0; i < (int)(n); ++i) 6