给定一个长度为 N 的数列,求数值严格单调递增的子序列的长度最长是多少。
输入格式第一行包含整数 N。
第二行包含 N 个整数,表示完整序列。
输出格式输出一个整数,表示最大长度。
数据范围1≤N≤100000,
−109≤数列中的数≤109
7
3 1 2 1 8 5 6
4
算法:动态规划,贪心 分析:#include#include #include using namespace std; const int N = 100010; int f[N], len, n; int main() { cin >> n; int k = n; f[0] = -1e9 + 1; //确保第一个数在极端边界情况下能够插入长度为1的序列中 while(k--) { int a; cin >> a; int l = 0, r = len; while(l < r) { int mid = l + r + 1 >> 1; if(f[mid] < a) l = mid; else r = mid - 1; } if(f[l] != a) f[l + 1] = a; len = max(len, l + 1); } cout << len << endl; return 0; }



