https://pintia.cn/problem-sets/994805260223102976/problems/994805278589960192
这题肯定不能一个一个去比较前后的数的,所以用了三次循环。
1、正序标记没有按从小到大排序的数;
2、逆序标记没有按从小到大排序的数;
3、输出没有被标记的数。
测试点2是一个坑,就是在可能的主元个数为0的时候,需要打印换行。
#include<iostream>
using namespace std;
int main() {
int n, count=0;
long int max=0, min=1000000001;
cin >> n;
long int zhu[n], num[n];
// 正序标记没有按从小到大排序的数
for(int i=0; i<n; i++){
cin >> num[i];
if(max > num[i]){
zhu[i] = 0;
}else{
max = num[i];
zhu[i] = 1;
count ++;
}
}
// 逆序标记没有按从小到大排序的数
for(int i=n-1; i>=0; i--){
if(num[i] > min){
if(zhu[i] == 1)
count --;
zhu[i] = 0;
}else{
min = num[i];
}
}
// 开始打印
cout << count << endl;
if(count == 0){
cout << endl;
}
for(int i=0; i<n && count>0; i++){
if(zhu[i] == 1){
cout << num[i];
count --;
if(count>0)
cout << " ";
}
}
return 0;
}