Pagini recente » Cod sursa (job #2741919) | Cod sursa (job #1628102) | Cod sursa (job #1527316) | Cod sursa (job #2702533) | Cod sursa (job #1268648)
#include <cstdio>
#include <set>
#include <map>
#include <stack>
#include <algorithm>
using namespace std;
#define INF ((1 << 31) - 1)
int main()
{
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
int N;
scanf("%d", &N);
multiset < int > A;
multiset < int > :: iterator it;
map < int , int > P;
int i;
int X;
for(i = 1 ; i <= N ; ++i)
{
scanf("%d", &X);
A.insert(X);
it = A.lower_bound(X);
if(it == A.begin())
{
P[X] = -1;
}
else
{
--it;
P[X] = *it;
++it;
}
if(++it != A.end())
A.erase(it);
}
printf("%d\n", A.size());
stack < int > S;
X = *A.rbegin();
while(X >= 0)
{
S.push(X);
X = P[X];
}
while(!S.empty())
{
printf("%d ", S.top());
S.pop();
}
return 0;
}