**** 开两个数组,一个存贮<=i 区间的最大值,一个存储>=i 区间的最小值,遍历数组,若原数组和这里两个数组某一位置三个值均相等,则该点合法
时间复杂度O(N);
#include<iostream>
using namespace std;
const int N=1e5+10;
int a[N],f[N],g[N];
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
int max=0,min=0x7fffffff;
for(int i=0;i<n;i++)
{
if(a[i]>max) max=a[i];
f[i]=max;
if(a[n-1-i]<min) min=a[n-1-i];
g[n-1-i]=min;
}
int cnt=0;
for(int i=0;i<n;i++)
if(f[i]==g[i]&&f[i]==a[i])
cnt++;
cout<<cnt<<endl;
for(int i=0;i<n;i++)
if(f[i]==g[i]&&f[i]==a[i])
cout<<a[i]<<' ';
cout<<endl;
return 0;
}