题目难度:一颗半星
题目大意:给定一个序列,问有多少元素是满足快排的主元的?输出个数和每个数值,要求按照升序输出。
题目坑点:题目是没难度,就是测试点2太坑了,我想了二十分钟,没想过哪里有问题,然后百度一通发现,当如果主元的个数为零的时候,需要输出一个回车。。。。我晕。。。。它开心就好
题目代码:
#include<iostream>
#include<stdlib.h>
#include<queue>
#include<stack>
#include<algorithm>
#include<map>
#include<cstring>
using namespace std;
int l[100010],r[100010],ans[100010];
int main(){
memset(l,0,sizeof(int)*100010);
memset(r,0,sizeof(int)*100010);
int N,min,max;
cin>>N;
int num[N];
for(int i=0;i<N;i++){
cin>>num[i];
}
l[0]=1;
max=num[0];
for(int i=1;i<N;i++){
if(max<=num[i]){
l[i]=1;
max=num[i];
}
}
r[N-1]=1;
min=num[N-1];
int count=0;
for(int i=N-2;i>=0;i--){
if(min>=num[i]){
r[i]=1;
min=num[i];
}
}
for(int i=0;i<N;i++){
if(l[i]==1&&r[i]==1)
ans[count++]=num[i];
}
cout<<count<<endl;
for(int i=0;i<count;i++){
cout<<ans[i];
if(i!=count-1)
cout<<" ";
}
if(count==0)
cout<<endl;
return 0;
}