将数字存入vector中
遍历两次
第一次从左往右,用last_max记录左边最大数,如果大于当前数,将当前数标记为非pivot
第一次从右往左,用right_min记录右边最小数,如果小于当前数,将当前数标记为非pivot
最后不加cout<<endl;这一行有个测试点会报格式错误,虽然不知道为啥,但是加上就好。
#include<iostream>
#include<vector>
using namespace std;
vector<int> v;
int ans=0;
int main(){
int N;
cin>>N;
int ispivot[N]={0};
int left_max,right_min;
v.resize(N);
for(int i=0;i<N;i++){
scanf("%d",&v[i]);
}
left_max=v[0];
right_min=v[N-1];
for(int i=1;i<N;i++){
if(left_max<v[i]){
left_max=v[i];
}else{
ispivot[i]=1;
}
}
for(int i=N-2;i>=0;i--){
if(right_min>v[i]){
right_min=v[i];
}else{
ispivot[i]=1;
}
}
for(int i=0;i<N;i++){
if(ispivot[i]==0){
ans++;
}
}
printf("%d\n",ans);
int ct=0;
for(int i=0;i<N;i++){
if(ispivot[i]==0){
if(ct==0){
printf("%d",v[i]);
ct++;
}else{
printf(" %d",v[i]);
}
}
}
cout<<endl;//没有这一行有个测试点会报格式错误 不知道为什么但是加上就好了
return 0;
}