题意很简单,大力枚举显然不行O(n^2)
可以首先从前往后扫一遍记录最大值,开一个数组记录一下
从后扫一遍记录最小值
O(n)
最后一句代码是本题的坑点
#include <bits/stdc++.h>
using namespace std;
int a[102000];
bool b[102000];
bool c[102000];
int main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}int Max=0;for(int i=1;i<=n;i++){b[i]=(a[i]>Max);Max=max(Max,a[i]);}int Min=0x3f3f3f3f;for(int i=n;i>=1;i--){c[i]=(a[i]<Min);Min=min(Min,a[i]); }vector <int> ans;for(int i=1;i<=n;i++){if(b[i]&&c[i]){ans.push_back(a[i]);}}cout<<ans.size()<<endl;sort(ans.begin(),ans.end());for(int i=0;i<ans.size();i++){printf("%d%c",ans[i],i==ans.size()-1?'\n':' ');}if(ans.size()==0){printf("\n");}return 0;
}