Pagini recente » Cod sursa (job #1306109) | Cod sursa (job #1165237) | Cod sursa (job #1032217) | Cod sursa (job #2935259) | Cod sursa (job #2838076)
#include<bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int INF=2e9+1;
vector<int> lis(vector<int>a)
{
int n=a.size();
vector<int>d(n+1,INF),p(n+1,-1),ind(n+1,-1),rec;
d[0]=-INF;
p[0]=-1;
for(int i=0;i<n;i++)
{
int j=upper_bound(d.begin(),d.end(),a[i]) - d.begin();
if(d[j-1]<a[i]&&a[i]<d[j])
{
d[j]=a[i];
p[i]=ind[j-1];
ind[j]=i;
}
}
int ans=0;
for(int i=0;i<=n;i++)
if(d[i]<INF)
ans=i;
int i=ind[ans];
while(i!=-1)
{
rec.push_back(a[i]);
i=p[i];
}
sort(rec.begin(),rec.end());
return rec;
}
vector<int>v,rez;
int main()
{
int n,i,x;
fin>>n;
for(i=1;i<=n;i++)
{
fin>>x;
v.push_back(x);
}
rez=lis(v);
fout<<rez.size()<<"\n";
for(auto q:rez)
fout<<q<<" ";
}