#include #include using namespace std; // nalezení nejdelší rostoucí podposloupnosti int nrp(vector krabice, int n) { //na indexu i se nachází délka nrp končící i-tou krabicí // na začátku vše inicializujeme na 1 vector nrp(n, 1); // nalezení délky nrp končící i-tou krabicí pro všechna i od 1 do n // pro počítání vyšších indexů se používají již spočítané hodnoty pro nižší indexy for(int i = 0; i < n; i++) for(int j = 0; j < i; j++) if(krabice[i] > krabice[j] && nrp[i] < nrp[j]+1) nrp[i] = nrp[j]+1; // nalezení maxima int max = 0; for(int i : nrp) if(i > max) max = i; return max; } int main() { int n; cin >> n; vector krabice(n); for(int i = 0; i < n; i++) { cin >> krabice[i]; } cout << nrp(krabice, n) << endl; }