部分结果格式错误,考虑特殊值导致没有输出换行符。如此题中如果没有对outcome的size为0的情况的判断的话,将导致一个样例格式错误。
#include<cstdio>
#include<cmath>
#include<vector>
#include<iostream>
#include<string>
#include<queue>
#include<set>
#define maxn 100100
#define inf 1000000010
using namespace std;
int n[maxn], ax[maxn], in[maxn]; // ax: max in: min
set<int> outcome;
int main() {
int N, maxone = -1, minone = inf;
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &n[i]);
if (n[i] > maxone) maxone = n[i];
ax[i] = maxone;
}
for (int i = N - 1; i >= 0; i--) {
if (n[i] < minone) minone = n[i];
in[i] = minone;
}
for (int i = 0; i < N; i++) {
if (n[i] >= ax[i] && n[i] <= in[i]) outcome.insert(n[i]);
}
int si = outcome.size();
printf("%d\n", si);
int j = 0;
if (si == 0) {
printf("\n");
return 0;
}
for (set<int>::iterator it = outcome.begin(); it != outcome.end(); it++) {
printf("%d", *it);
if (j < si - 1) {
printf(" ");
}
else printf("\n");
j++;
}
return 0;
}