#include <vector> #include <algorithm> #include <stdio.h> //将一个序列分成n个递增子序列,求n的最小值 int MinIncrSeqCount(const std::vector<int>& v) { std::vector<int> v1; for (auto& value : v) { auto it = std::upper_bound(v1.begin(), v1.end(), value, [](int a, int b){return a > b;}); if (it == v1.end()) v1.push_back(value); else *it = value; } return (int)v1.size(); } int main(int argc, char** argv) { printf("%d\n", MinIncrSeqCount({1})); printf("%d\n", MinIncrSeqCount({1,3})); printf("%d\n", MinIncrSeqCount({3,3})); printf("%d\n", MinIncrSeqCount({1,3,3,3})); printf("%d\n", MinIncrSeqCount({1,3,2})); printf("%d\n", MinIncrSeqCount({1,3,2,6,4})); printf("%d\n", MinIncrSeqCount({1,3,2,6,4,3})); printf("%d\n", MinIncrSeqCount({1,3,2,6,4,5})); return 0; }