Pagini recente » Cod sursa (job #90191) | Cod sursa (job #685055) | Cod sursa (job #1307837) | autumn-warmup-2007/clasament/runda-1 | Cod sursa (job #182587)
Cod sursa(job #182587)
#include<stdio.h>
#define ooo 2000
#define cucu 0
int n,len;
int v[ooo],p[ooo],q[ooo];
void DataRead()
{
freopen("scmax.in","r",stdin);
scanf("%i",&n);
for(int i=1;i<=n;i++)
scanf("%i",&v[i]);
fclose(stdin);
}
int insert(int k,int l,int h)
{
int m=(l+h)/2;
if (l==h)
{if (h>len) q[++len+1]=cucu;
q[l]=k;
return l;}
else if (k<q[m]) return insert(k,l,m);
else return insert(k,m+1,h);
}
void build()
{
len=0;q[1]=cucu;
for(int i=1;i<=n;i++)
p[i]=insert(v[i],1,len+1);
}
void WriteSolution()
{
int i;
freopen("scmax.out","w",stdout);
int lungime=len,inainte;
for(i=1;i<=len;i++)
if ((q[i]==q[i-1]&&i>1)||(q[i]==inainte)) {lungime--;if(q[i]!=inainte) inainte=q[i];q[i]=cucu;}
printf("%i\n",lungime);
for(i=1;i<=len;i++)
if (q[i]!=cucu)
printf("%i ",q[i]);
fclose(stdout);
}
int main()
{
DataRead();
build();
int k=n;
for(int i=len;i;i--)
{while(p[k]!=i) k--;
q[i]=v[k];}
WriteSolution();
return 0;
}