Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <algorithm>
- #include <cstring>
- using namespace std;
- struct Ans{
- int maxSub;
- int prev;
- };
- int main() {
- int n;
- cin >> n;
- int a[n];
- for (int i = 0; i < n; ++i){
- cin >> a[i];
- }
- Ans m[n];
- for (int i = 0; i < n; ++i){
- m[i].prev = -1;
- m[i].maxSub = 1;
- for (int j = 0; j < i; ++j){
- if (a[i] > a[j] && m[i].maxSub <= m[j].maxSub){
- m[i].maxSub = m[j].maxSub + 1;
- m[i].prev = j;
- }
- }
- }
- int numOfMax = 0;
- for (int i = 1; i < n; ++i){
- if (m[i].maxSub > m[numOfMax].maxSub) numOfMax = i;
- }
- int answer[m[numOfMax].maxSub], curr = numOfMax;
- for (int i = m[numOfMax].maxSub - 1; i >= 0; --i){
- answer[i] = a[curr];
- curr = m[curr].prev;
- }
- for (int i = 0; i < m[numOfMax].maxSub; ++i){
- cout << answer[i] << " ";
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement