Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const short LOVE = 1411;
- const int N = 1e3;
- int n;
- int a[N + 1];
- int mem[N + 1];
- int trace[N + 1];
- bitset<N + 1> visited;
- void print(int n) {
- if (trace[n] != n) print(trace[n]);
- cout << a[n] << ' ';
- }
- int f(int n) {
- if (n == 0) return 1;
- if (visited[n]) return mem[n];
- visited[n] = true; mem[n] = 1; trace[n] = n;
- for (int i = 0; i < n; ++i)
- if (a[i] < a[n] && mem[n] < f(i) + 1)
- mem[n] = f(i) + 1,
- trace[n] = i;
- return mem[n];
- }
- void query() {
- cin >> n;
- for (int i = 0; i < n; ++i) cin >> a[i];
- int k = 0;
- for (int i = 1; i < n; ++i)
- if (f(i) > f(k)) k = i;
- cout << f(k) << '\n';
- print(k);
- }
- int main(){
- //freopen("Test.INP", "r", stdin);
- //freopen("Test.OUT", "w", stdout);
- cin.tie(NULL)->sync_with_stdio(false);
- int t; for (t = 1; t--;) query();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement