之前写过一种方法,用时间复杂度为(n2)直接超时,之后才改用下面的方法:
本题关键是用两个数组,一个为排了序之后的数组,另一个为原来的数组,两者之间再进行比较;
注意;在输出答案时,要输出空行,不然一个测试点会报错
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n,cnt=0;
//freopen("1045.txt","r",stdin);
cin>>n;
int a[n],b[n],v[n];
for(int i=0;i<n;i++)
{
cin>>a[i];b[i]=a[i];
}
sort(a,a+n);int Maxn=-1;
for(int i=0;i<n;i++)
{
if(a[i]==b[i]&&b[i]>Maxn)
{
v[cnt++]=b[i];
}
if(b[i]>Maxn)
Maxn=b[i];
}
cout<<cnt<<endl;
for(int i=0;i<cnt;i++)
{
if(i!=0)
cout<<" "<<v[i];
else
cout<<v[i];
}
cout<<endl;//要输出一行否则出错
return 0;
}