PAT 乙级 1045 快速排序
暴力法来做会超时。
用向量ab来保存原序列,对a进行排序,然后进行遍历
如果a[i] == b[i] 并且b[i]大于它左边的最大值,那么b[i]一定是主元(画两个向量,很好理解)
// 1045 快速排序.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <iostream>
#include <algorithm>
#include <vector>
#define maxN 100005
using namespace std;
int res[maxN];
int main()
{
int n, max = 0, cnt = 0;
cin >> n;
vector<int> a(n), b(n);
for (int i = 0; i < n; i++) {
cin >> a[i];
b[i] = a[i];
}
sort(a.begin(), a.end());
for (int i = 0; i < n; i++) {
if (a[i] == b[i] && b[i] > max) {
res[cnt++] = b[i];
}
if (b[i] > max) {
max = b[i];
}
}
cout << cnt << endl;
if (cnt) {
for (int i = 0; i < cnt; i++) {
if (i != 0) cout << " ";
cout << res[i];
}
}
else {
cout << endl;
}
return 0;
}