Pagini recente » Cod sursa (job #169286) | Cod sursa (job #2264359) | Cod sursa (job #1306644) | Cod sursa (job #2135185) | Cod sursa (job #2690241)
#include <vector>
#include <fstream>
#include <cstdio>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n;
void find_seq(vector<int>&a,vector<int> &b)
{
vector<int>p(n);
int i,u,v;
b.push_back(0);
for(i=0;i<n;++i)
{
if(a[i]>a[b.back()])
{
p[i]=b.back();
b.push_back(i);
continue;
}
for(u=0,v=b.size()-1;u<v;)
{
int c=(u+v)/2;
if(a[i]>a[b[c]])u=c+1;
else v=c;
}
if(a[i]<a[b[u]])
{
if(u>0)p[i]=b[u-1];
b[u]=i;
}
}
for(u=b.size(),v=b.back();u--;v=p[v])b[u]=v;
}
int main()
{
int i,x;
fin>>n;
vector <int>seq;
vector<int>lis;
for(i=1;i<=n;++i)
{
fin>>x;
seq.push_back(x);
}
find_seq(seq,lis);
fout<<lis.size()<<'\n';
for(i=0;i<lis.size();++i)
fout<<seq[lis[i]]<<' ';
return 0;
}