Pagini recente » Cod sursa (job #2829568) | Cod sursa (job #1144673) | Cod sursa (job #1271821) | Cod sursa (job #214853) | Cod sursa (job #1414364)
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
#define Nmax 100010
using namespace std;
int n , i , lg , crt;
int a[Nmax] , Max_pos[Nmax];
vector < int > left;
vector < int > :: iterator poz;
queue < int > sol;
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &n);
for (i = 1; i <= n; ++i)
{
scanf("%d", &a[i]);
poz = upper_bound(left.begin() , left.end() , a[i]);
if (poz == left.end() && (left.empty() || *(--poz) < a[i]))
{
left.push_back(a[i]);
Max_pos[i] = left.size();
lg = left.size();
}
else if (poz == left.begin() || *(--poz) < a[i])
{
if (*poz < a[i]) poz++;
*poz = a[i];
Max_pos[i] = poz - left.begin() + 1;
}
}
for (crt = 1 , i = 1; i <= n; ++i)
if (Max_pos[i] == crt)
{
sol.push(a[i]);
++crt;
}
for (printf("%d\n", lg); sol.size(); sol.pop())
printf("%d ", sol.front());
return 0;
}