原题链接:PTA | 程序设计类实验辅助教学平台
题目(图片):
Sample Input
5
1 3 2 4 5
思路:
递推的方法
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAX=100010;
int main()
{
int n;cin>>n;
int a[MAX];
for(int i=0;i<n;i++){
cin>>a[i];
}
int leftmax[MAX]={0};//leftmax[i]第i位数以前的最大值
for(int i=1;i<n;i++){
leftmax[i]=max(leftmax[i-1],a[i-1]);
}
int rightmin[MAX];//rightmin[i]第i位数往后的数的最小值
rightmin[n-1]=999999999;
for(int i=n-2;i>=0;i--){
rightmin[i]=min(rightmin[i+1],a[i+1]);
}
int tmp[MAX],ans=0;
for(int i=0;i<n;i++){
if(leftmax[i]<a[i]&&a[i]<rightmin[i]){
tmp[ans++]=a[i];
}
}
cout<<ans<<endl;
//
if(ans>0){
for(int i=0;i<ans-1;i++){
cout<<tmp[i]<<' ';
}
cout<<tmp[ans-1];
}
//无答案的时候输出换行
else cout<<endl;
return 0;
}
注意要点: