Pagini recente » Cod sursa (job #1906169) | Cod sursa (job #1229944) | Cod sursa (job #1597826) | Cod sursa (job #2605866) | Cod sursa (job #2414163)
#include <cstdio>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;
const int NMAX=100005;
vector<int>v;
int pos[100005];
int main()
{
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int n,i,j,m,nr;
scanf("%d",&n);
v.push_back(0);
for(i=1;i<=n;i++){scanf("%d",&nr);v.push_back(nr);}
vector<int>q;
q.push_back(v[1]);
pos[1]=1;
vector<int>::iterator it;
for(i=2;i<=n;i++)
{
it=lower_bound(q.begin(),q.end(),v[i]);
if((*it)==v[i])
{
pos[i]=it-q.begin()+1;
continue;
}
if(it==q.end())
{
q.push_back(v[i]);
pos[i]=q.size();
continue;
}
q[it-q.begin()]=v[i];
pos[i]=it-q.begin()+1;
}
int cm=1;
for(i=1;i<=n;i++)
cm=max(cm,pos[i]);
printf("%d\n",cm);
stack<int>st;
for(i=n;i>=1;--i)
{
if(pos[i]==cm)
{
st.push(v[i]);
--cm;
}
}
while(!st.empty())
{
printf("%d ",st.top());
st.pop();
}
return 0;
}