Pagini recente » Cod sursa (job #2807587) | Cod sursa (job #1847301) | Cod sursa (job #1910210) | Cod sursa (job #2337550) | Cod sursa (job #2296472)
#include <cstdio>
#include <vector>
#include <algorithm>
#define pb push_back
using namespace std;
const int NMAX = 100005;
vector<int>q;
int v[NMAX];
int p[NMAX];
vector<int>sol;
int sol[NMAX];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n;
scanf("%d",&n);
for(int i = 0 ; i < n ; i++)
scanf("%d",&v[i]);
for(int i = 0 ; i < n ; i++)
{
if(q.empty())
{
q.pb(v[i]);
p[0]=0;
continue;
}
vector<int>::iterator it;
int poz;
int val = v[i];
it = lower_bound(q.begin(),q.end(),val);
if(it == q.end())
{
q.pb(v[i]);
p[i] = q.size()-1;
continue;
}
poz = it - q.begin();
*it = v[i];
p[i] = poz;
}
int ct = q.size()-1;
int pos;
for(int i = n-1 ; i >= 0 ; i--)
{
if(p[i] == ct)
{
pos = i;
break;
}
}
for(int i = pos ; i >= 0 ; i--)
{
if(p[i] == ct)
{
ct--;
sol.pb(v[i]);
}
}
reverse(sol.begin(),sol.end());
printf("%d\n",sol.size());
for(int i = 0 ; i < sol.size() ; i++)
printf("%d ",sol[i]);
return 0;
}