Sereja loves integer sequences very much. He especially likes stairs.
Sequence a1, a2, ..., a|a| (|a| is the length of the sequence) is stairs if there is such index i (1 ≤ i ≤ |a|), that the following condition is met:
For example, sequences [1, 2, 3, 2] and [4, 2] are stairs and sequence [3, 1, 2] isn't.
Sereja has m cards with numbers. He wants to put some cards on the table in a row to get a stair sequence. What maximum number of cards can he put on the table?
The first line contains integer m (1 ≤ m ≤ 105) — the number of Sereja's cards. The second line contains m integers bi (1 ≤ bi ≤ 5000) — the numbers on the Sereja's cards.
In the first line print the number of cards you can put on the table. In the second line print the resulting stairs.
输出数列为凸型
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; }
int main()
{
int a[100010],b[100010],c[100010],n,i,j,x=0;
scanf("%d",&n);
for(int k=0;k<n;++k)
scanf("%d",&a[k]);
qsort(a,n,sizeof(int),cmp);
memset(b,0,sizeof(b));
i=0;j=n-1;
x=n;
for(int k=0;k<n;)
{
if(a[k]==b[i-1]&&a[k]==b[j+1]) {++k;--x;continue;}
if(a[k]!=b[i-1])
b[i++]=a[k++];
else b[j--]=a[k++];
}
if(b[i-1]==b[j+1])
{
b[j+1]=0;
--x;
}
printf("%d\n",x);
for(int k=n-1;k>0;--k)
if(b[k])
printf("%d ",b[k]);
printf("%d\n",b[0]);
return 0;
}