#include <iostream>
#include <vector>
using
namespace
std;
void
findMaxLengthSequence(
int
N,
int
arr[4])
{
int
rightmost_element = -1;
int
i = 0;
int
j = N - 1;
vector<
int
> sequence;
while
(i <= j) {
if
(arr[i] > arr[j]) {
if
(arr[j] > rightmost_element) {
sequence.push_back(arr[j]);
rightmost_element = arr[j];
j--;
}
else
if
(arr[i] > rightmost_element) {
sequence.push_back(arr[i]);
rightmost_element = arr[i];
i++;
}
else
break
;
}
else
if
(arr[i] < arr[j]) {
if
(arr[i] > rightmost_element) {
sequence.push_back(arr[i]);
rightmost_element = arr[i];
i++;
}
else
if
(arr[j] > rightmost_element) {
sequence.push_back(arr[j]);
rightmost_element = arr[j];
j--;
}
else
break
;
}
else
if
(arr[i] == arr[j]) {
if
(i == j) {
if
(arr[i] > rightmost_element) {
sequence.push_back(arr[i]);
rightmost_element = arr[i];
i++;
}
break
;
}
else
{
sequence.push_back(arr[i]);
int
k = i + 1;
vector<
int
> max_left;
while
(k < j && arr[k] > arr[k - 1]) {
max_left.push_back(arr[k]);
k++;
}
int
l = j - 1;
vector<
int
> max_right;
while
(l > i && arr[l] > arr[l + 1]) {
max_right.push_back(arr[l]);
l--;
}
if
(max_left.size() > max_right.size())
for
(
int
element : max_left)
sequence.push_back(element);
else
for
(
int
element : max_right)
sequence.push_back(element);
break
;
}
}
}
for
(
int
element : sequence)
printf
(
"%d "
, element);
}
int
main()
{
int
N = 4;
int
arr[] = { 1, 3, 2, 1 };
findMaxLengthSequence(N, arr);
}