Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int a[1001], n;
- int L[1001]; // L[i] lung c.m.lung subsir cresc. care se termina cu a[i]
- int t[1001]; // t[i] = j (in subsir, imediat dupa a[j] s-a luat a[i]
- int main()
- {
- cin >> n;
- for (int i = 1; i <= n; ++i) // O(n)
- cin >> a[i];
- for (int i = 1; i <= n; ++i)
- {
- L[i] = 1;
- for (int j = 1; j < i; ++j)
- if (a[j] < a[i] && L[i] < L[j] + 1)
- {
- L[i] = L[j] + 1;
- t[i] = j;
- }
- }
- int Lmax = 0;
- int k; // poz pe care se termina cmlsc
- for (int i = 1; i <= n; ++i)
- if (L[i] > Lmax)
- {
- Lmax = L[i];
- k = i;
- }
- cout << Lmax << '\n';
- int m = Lmax;
- int rezultat[1001]
- for (int i = k; i > 0; i = t[i]) {
- rezultat[m] = a[i];
- --m;
- }
- for (int i = 1; i <= Lmax; ++i)
- cout << rezultat[i] << ' ';
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement