Pagini recente » Cod sursa (job #1557290) | Cod sursa (job #3138667) | Cod sursa (job #1474463) | Cod sursa (job #2045432) | Cod sursa (job #1016383)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,v[10000],D[10000],dp[10000],smax;
int ddy[10000];
int binsearch(int x)
{
int li = 1 , lf = smax , m;
while(li <= lf)
{
m = li + ((lf-li)>>1);
if(dp[m] > x) lf = m-1;
else if (dp[m] < x) li = m+1;
else return m;
}
return lf;
}
void add(int x,int i)
{
int poz = binsearch(x);
ddy[i] = D[poz];
if(poz == smax)
{
dp[++smax] = x;
D[smax] = i;
}
else
{
if(dp[poz+1] > x)
{
dp[poz + 1] = x;
D[poz + 1] = i;
}
}
}
void print(int x)
{
if(x)
{
print(ddy[x]);
printf("%d ",v[x]);
}
}
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]);
add(v[i],i);
}
printf("%d\n",smax);
print(D[smax]);
return 0;
}