Pagini recente » Cod sursa (job #1182284) | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1304791) | Cod sursa (job #2078259)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
vector <int> q,p,v;
vector <int>::iterator it;
vector <int> sol;
int main()
{
freopen("lis.in","r",stdin);
freopen("lis.out","w",stdout);
int n,i,x;
scanf("%d",&n);
for(int i=1;i<=n;++i){
scanf("%d",&x);
v.push_back(x);
}
q.push_back(v[0]);
p.assign(n,0);
p.push_back(1);
for(i=1;i<n;++i)
{
it=lower_bound(q.begin(),q.end(),v[i]);
int poz=(int)(it-q.begin());
if(it!=q.end())
q[poz]=v[i];
else
q.push_back(v[i]);
p[i]=poz;
}
printf("%d\n",q.size());
int y=q.size()-1;
for(int i=p.size();i>=0;--i)
{
if(p[i]==y){
sol.push_back(v[i]);
--y;
}
}
reverse(sol.begin(),sol.end());
for(it=sol.begin();it!=sol.end();++it)
printf("%d ",*it);
return 0;
}