Pagini recente » Cod sursa (job #1602687) | Cod sursa (job #1130369) | Cod sursa (job #481083) | Cod sursa (job #1057121) | Cod sursa (job #1824459)
#include <stdio.h>
using namespace std;
int v[100000+1], s[100000+1], l[100000+1], last, mid, n, maxs, maxd, j;
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for(int i=1;i<=n;i++)
{
scanf("%d", &v[i]);
if(v[i]>s[last])
{
s[++last]=v[i];
maxs=last;
}
else
{
maxs=1;
maxd=last;
while(maxs<maxd)
{
mid=(maxs+maxd)/2;
if(v[i]<=s[mid])
maxd=mid-1;
else
maxs=mid+1;
}
if(s[maxs]>=v[i])
s[maxs]=v[i];
else
{
maxs++;
s[maxs]=v[i];
}
}
l[i]=maxs;
}
printf("%d\n", last);
int aux=last;
for(int i=n; i>0; i--)
{
if(aux!=l[i]) continue;
s[aux]=v[i];
aux--;
}
for(aux=1;aux<=last;aux++)
printf("%d ", s[aux]);
return 0;
}