Pagini recente » Cod sursa (job #1705710) | Cod sursa (job #3139336) | Cod sursa (job #1911401) | Cod sursa (job #805421) | Cod sursa (job #2975127)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int INF= 2e9+1;
int n,L,x;
vector<int> a;
int tr[100005],ind[100005];
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>x;
a.push_back(x);
}
vector<int> d(n+2,INF);
d[0]=-INF;
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])
{
if(a[i]<d[j])
{
d[j]=a[i];
ind[j]=i;
tr[i]=ind[j-1];
}
}
}
for(int i=0;i<=n;i++)
{
if(d[i]<INF)
L=i;
}
fout<<L<<endl;
vector<int>ans;
int pos=ind[L];
while(pos > 0) {
ans.push_back(pos);
pos = tr[pos];
}
reverse(ans.begin(), ans.end());
for(int i = 0; i < (int) ans.size(); i++) {
fout << a[ans[i]] << " ";
}
return 0;
}