#include <iostream>
#include <vector>
int calcMaxLISLength(const std::vector<int>& K) {
std::vector<int> N(K.size(), 1);
int maxL = 0;
for(int i = 0; i < K.size(); i++) {
int Ki = K[i];
int maxNi = 0;
for(int j = 0; j < i; j++) {
int Kj = K[j];
if(Kj < Ki) {
int Nj = N[j];
if(Nj > maxNi) {
maxNi = Nj;
}
}
}
int Ni = maxNi + 1;
N[i] = Ni;
if(maxL < Ni) {
maxL = Ni;
}
}
return maxL;
}
int main(int argc, char** argv) {
// 2 5 1 5 4 5
// 3
std::vector<int> K = {2, 5, 1, 5, 4, 5};
int r = calcMaxLISLength(K);
std::cout << r << std::endl;
// 17
K = {317, 211, 180, 187, 104, 285, 63, 117, 320, 35, 288, 299,
235, 282, 105, 231, 253, 74, 143, 148, 77, 249, 310, 137,
191, 184, 88, 8, 194, 12, 117, 108, 260, 313, 114, 261, 60,
226, 133, 61, 146, 297, 291, 13, 198, 286, 254, 96, 135, 48,
135, 307, 23, 155, 203, 258, 168, 42, 301, 45, 164, 193, 26,
290, 280, 172, 94, 230, 156, 36, 250, 174, 47, 188, 148, 138,
194, 89, 71, 119, 218, 325, 136, 63, 271, 210, 320, 309};
r = calcMaxLISLength(K);
std::cout << r << std::endl;
return 0;
}