Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
140466 | maoyu | 最长不下降子序列 | C++ | 解答错误 | 20 | 18 MS | 644 KB | 567 | 2024-03-30 15:32:31 |
#include<iostream> using namespace std; const int N = 1e5 + 10; int n, a[N], f[N], top = 0; int g(int x){ int l = 0, r = top, res = 0; while(l <= r){ int mid = (l + r) / 2; if(f[mid] >= x){ l = mid + 1; res = mid; } else{ r = mid - 1; } } return res; } int main(){ cin >> n; for(int i = 0; i < n; i++){ cin >> a[i]; } for(int i = 0; i < n; i++){ if(a[i] >= f[top]) f[top+1] = a[i], top++; else f[g(a[i])] = a[i]; } // for(int i = 1; i <= top; i++) cout << f[i] << ' '; cout << top; return 0; }