Pagini recente » Cod sursa (job #987961) | Cod sursa (job #2765093) | Cod sursa (job #316960) | Cod sursa (job #1182447) | Cod sursa (job #508149)
Cod sursa(job #508149)
#include <stdio.h>
#include <algorithm>
#include <set>
#define NMAX 100005
#define pii pair<int,int>
#define f first
#define s second
#define mp make_pair
using namespace std;
int n,A[NMAX],best[NMAX],rez,st;
multiset <pii> B;
void read()
{
scanf("%d",&n);
int i;
for (i=1; i<=n; i++)
scanf("%d",&A[i]);
}
void solve()
{
multiset <pii> :: reverse_iterator x;
int i,bestv;
for (i=1; i<=n; i++)
{
bestv=0;
for (x=B.rbegin(); x!=B.rend(); x++)
if ((*x).s<A[i])
{
bestv=(*x).f;
break ;
}
best[i]=bestv+1;
B.insert(mp(best[i],A[i]));
if (best[i]>rez)
rez=best[i];
if (best[i]==rez)
st=i;
}
}
void reconst(int x,int val)
{
int i;
if (val==1)
{
printf("%d ",A[x]);
return ;
}
for (i=x-1; i>=1; i--)
if (best[i]==val-1 && A[x]>A[i])
{
reconst(i,val-1);
printf("%d ",A[x]);
return ;
}
}
void show()
{
printf("%d\n",rez);
reconst(st,rez);
}
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
read();
solve();
show();
return 0;
}