Pagini recente » Cod sursa (job #39194) | Cod sursa (job #759109) | Cod sursa (job #2908204) | Cod sursa (job #2031086) | Cod sursa (job #3222623)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
#define nmax 100000
int n;
int v[nmax+1];
vector<int> p, q, ans;
int main()
{
cin>>n;
for(int i=1; i<=n; i++)
{
cin>>v[i];
int st=0, dr=q.size()-1, pos=q.size();
while(st<=dr)
{
int m=(st+dr)/2;
if(q[m]>=v[i])
dr=m-1, pos=m;
else
st=m+1;
}
if(pos==q.size())
q.push_back(v[i]);
else
q[pos]=v[i];
p.push_back(pos);
}
/*
for(int i=0; i<q.size(); i++)
cout<<q[i]<<' ';
cout<<'\n';
for(int i=0; i<p.size(); i++)
cout<<p[i]<<' ';
cout<<'\n';
*/
int len=q.size()-1;
while(len>=0)
{
for(int i=p.size()-1; i>=0; i--)
if(p[i]==len)
{
ans.push_back(i);
len--;
}
}
cout<<q.size()<<'\n';
for(int i=ans.size()-1; i>=0; i--)
{
cout<<v[ans[i]+1]<<' ';
}
}