找快速排序的枢轴。。就是比左边的最大值要打,比右边的最小值要小。
直接遍历三遍就好啦。
#include <iostream>
#include <vector>
#include <climits>
#include <cstring>
#define MAX 100010
using namespace std;
int n;
int list[MAX];
int isPivot[MAX];
int pmin = INT_MAX, pmax = -1;
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
cin >> list[i];
if (pmax < list[i])
pmax = list[i];
if (list[i] >= pmax)
isPivot[i] = 1;
}
for (int i = n - 1; i >= 0; i--) {
if (pmin > list[i]) {
pmin = list[i];
}
if (list[i] <= pmin && isPivot[i] == 1) {
isPivot[i] = 2;
}
}
vector <int> ans;
for (int i = 0; i < n; i++) {
if (isPivot[i] == 2) {
ans.push_back(list[i]);
}
}
if (ans.size() == 0) {
cout << ans.size() << endl;
cout << endl;
}
else {
cout << ans.size() << endl;
cout << ans[0];
for (int i = 1; i < ans.size(); i++) {
cout << " " << ans[i];
}
cout << endl;
}
return 0;
}