题目链接:https://pintia.cn/problem-sets/994805342720868352/problems/994805366343188480
思路:找合适作为pivot point的点,要求是左边的数字全部小于它,并且右边的数字全部大于它
可以先从左开始向右判断符合左边数字全小于它的(大于最大值),然后再从右向左判断右边数字大于它的(小于最小值)
注意:结尾一定要将换行分开输出,不然写成cout<<a[i]<<endl;就不对了,因为有可能结果是0,那就只有一行了,与题目中
要求的两行不符。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 100010;
int a[maxn],vis[maxn],b[maxn];
int main(void)
{
int n,i,j,mx,mi;
cin>>n;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++) cin>>a[i];
mx=a[0];
for(i=0;i<n;i++)
{
if(a[i]<mx) vis[i]=1;
else mx=a[i];
}
mi=a[n-1];
for(i=n-1;i>=0;i--)
{
if(a[i]>mi) vis[i]=1;
else mi=a[i];
}
for(j=0,i=0;i<n;i++)
if(vis[i]==0) b[j++]=a[i];
sort(b,b+j);
cout<<j<<endl;
for(i=0;i<j;i++)
{
if(i) printf(" ");
cout<<b[i];
}
cout<<endl;
return 0;
}