Pagini recente » Cod sursa (job #2525099) | Cod sursa (job #1172404) | Cod sursa (job #1464215) | Cod sursa (job #2759130) | Cod sursa (job #302896)
Cod sursa(job #302896)
#include <cstdio>
#include <algorithm>
using namespace std;
#define FIN "scmax.in"
#define FOUT "scmax.out"
#define Nmax 100010
#define Inf 0x3f3f3f3f
int v[Nmax],n,nr,poz[Nmax],lmax[Nmax];
inline int cautbin(int p, int u, int x)
{
int mij,i,j;
mij=(p+u)>>1;
while(p<=u)
{
if (lmax[mij]>=x && lmax[mij-1]<x)
return mij;
if (lmax[mij]<x)
{
p=mij+1;
mij=(p+u)>>1;
}
else
{
u=mij-1;
mij=(p+u)>>1;
}
}
return ++nr;
}
inline void scrie(int n, int nr)
{
int i,j;
if(nr>=1)
{
if (poz[n]==nr)
{
scrie(n-1,nr-1);
printf("%d ",v[n]);
}
else
{
scrie(n-1,nr);
}
}
}
inline void solve()
{
int i,j,l;
for (i=1;i<=n;++i)
{
l=cautbin(1,nr,v[i]);
lmax[l]=v[i];
poz[i]=l;
}
}
inline void citire()
{
int i,j;
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d", &n);
for (i=1;i<=n;++i)
scanf("%d", &v[i]);
}
int main()
{
citire();
solve();
printf("%d\n", nr);
scrie(n,nr);
fclose(stdin);
fclose(stdout);
return 0;
}