#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
signed main(){
//离散化加不加无所谓
//如果排序之后比排序之前的位置靠后,那么说明右边还有比他小的数字
//如果排完序后比排序之前的位置考前,那么就说明左边又比他大的数字
int n;
cin >> n;
int a[n + 1],b[n + 1];
for(int i = 1; i <= n; i++) {
cin >> a[i];
b[i] = a[i];
}
int lmax = 0;
vector<int> ans;
sort(b+1,b+1+n);
for(int i = 1; i <= n; i++){
if(a[i] == b[i] && b[i] > lmax) ans.push_back(b[i]);
//如果和排序玩之后的位置一样,至少可以说明可能前面的都比他小,后面的都比他大,
//那么就需要说明这个位置左边的最大值不会比他大,
//那么就相当于1~i-1 都在左边
if(a[i] > lmax) lmax = a[i];
}
if(ans.size()){
cout << ans.size() << endl;
for(int i = 0; i < ans.size(); i++) cout << ans[i] << ' ';
}
else{
cout <<" ";
}
return 0;
}
Acwing1591快速排序
最新推荐文章于 2024-07-15 22:10:26 发布