题意
在快速排序中,给定一串经过一次划分的数字,找出可能的pivot
源码
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int n;
int a[1000005];
int mark[1000005];
bool cmp(int x,int y){
return x<y;
}
const int maxInt=1e9+5;
int main(){
memset(mark,0,sizeof(mark));
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
a[0]=-1;
a[n+1]=maxInt;
int curmin=a[n+1];
int curmax=a[0];
for(int i=1;i<=n;i++){
if(curmax<a[i]){
mark[i]++;
curmax=a[i];
}
}
for(int i=n;i>=1;i--){
if(curmin>a[i]){
mark[i]++;
curmin=a[i];
}
}
int counter=0;
vector<int>res;
for(int i=1;i<=n;i++){
if(mark[i]==2){
counter++;
res.push_back(a[i]);
}
}
cout<<counter<<endl;
if(counter==0){
cout<<""<<endl;
return 0;
}
sort(res.begin(),res.end(),cmp);
int len=res.size();
for(int i=0;i<len-1;i++){
cout<<res[i]<<" ";
}
cout<<res[res.size()-1]<<endl;
return 0;
}