Pagini recente » Borderou de evaluare (job #2779097) | Borderou de evaluare (job #935313) | Cod sursa (job #2208724)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream cin("smax.in");
ofstream cout("smax.out");
int n,i,lh,k,l;
int main()
{
cin>>n;
vector<int>x(n+1);
for(i=1;i<=n;++i)
cin>>x[i];
vector<int>s;
vector<int>h(n+1);
s.push_back(x[1]);
h[0]=1;
for(i=2;i<=n;++i)
{
if(x[i]>s[lh])
{
lh++;
s.push_back(x[i]);
h[i]=lh;
}
else
{
k=lower_bound(s.begin(), s.end(), x[i])-s.begin();
s[k]=x[i];
h[i]=k;
}
}
cout<<lh+1<<"\n";
int megold[lh+1];
l=lh+1;
for(i=n;i>=1;--i)
{
if(h[i]==lh)
{
megold[lh+1]=x[i];
lh--;
}
}
for(i=1;i<=l;++i) cout<<megold[i]<<" ";
return 0;
}