先建一个表记录每一个下标及其左边最大的元素,再建一个表记录每一个下标及其右边最小的元素。
如果一个元素比左边所有的元素大,比右边所有的元素小,那么它就是一个枢轴。
#define _CRT_SECURE_NO_WARNINGS
#include <cstdio>
#include <cstdlib>
#include <algorithm>
#include <vector>
#include <climits>
using namespace std;
int main(void)
{
int *largest, *least, i, n, *arr;
scanf("%d", &n);
largest = (int *)calloc(n, sizeof(int));
least = (int *)calloc(n, sizeof(int));
arr = (int *)calloc(n, sizeof(int));
for (i = 0; i < n; i++) {
scanf("%d", arr + i);
}
largest[0] = arr[0];
for (i = 1; i < n; i++) {
if (arr[i] > largest[i - 1]) {
largest[i] = arr[i];
}
else {
largest[i] = largest[i - 1];
}
}
least[n - 1] = arr[n - 1];
for (i = n - 2; i >= 0; i--) {
if (arr[i] > least[i + 1]) {
least[i] = least[i + 1];
}
else {
least[i] = arr[i];
}
}
vector<int> v;
for (i = 0; i < n; i++) {
if (arr[i] >= largest[i] && arr[i] <= least[i]) {
v.push_back(arr[i]);
}
}
sort(v.begin(), v.end());
printf("%d\n", v.size());
if (v.size()) {
printf("%d", v[0]);
for (i = 1; i < v.size(); i++) {
printf(" %d", v[i]);
}
}
putchar('\n');
return 0;
}