Pagini recente » Cod sursa (job #2778775) | Cod sursa (job #3235487) | Cod sursa (job #3218655) | Cod sursa (job #7301) | Cod sursa (job #2296477)
#include <bits/stdc++.h>
using namespace std;
vector< int > x;
vector< int > q;
vector< int > p;
int main()
{
int n;
cin >> n;
x.resize(n);
p.resize(n);
for(int i = 0; i < n; i++)
{
cin >> x[i];
}
vector<int>::iterator it;
for(int i = 0; i < n; i++)
{
it = upper_bound(q.begin(), q.end(), x[i]);
int poz = (int) (it - q.begin());
if(poz == q.size())
{
q.push_back(x[i]);
}
q[poz] = x[i];
p[i] = poz;
}
int cnt = q.size();
stack<int> st;
cout<<cnt<<"\n";
--cnt;
for(int i=n-1;i>=0;i--)
{
if(p[i] == cnt)
{
st.push(x[i]);
cnt--;
}
}
while(!st.empty())
{
cout<<st.top()<<" ";
st.pop();
}
return 0;
}