Pagini recente » Cod sursa (job #3256728) | Cod sursa (job #940570) | Cod sursa (job #577998) | Cod sursa (job #1995573) | Cod sursa (job #3195643)
#include <fstream>
#include <stack>
#include <vector>
#include <algorithm>
#include <map>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
vector < int > dp;
map < int , int > mp;
int main()
{
int n,a;
cin>>n;
dp.resize(n+2);
for(int i=1;i<=n+1;i++)
dp[i]=2000000005;
int r=1;
for(int i=1;i<=n;i++){
cin>>a;
int x=lower_bound(dp.begin(),dp.begin()+r,a)-dp.begin();
if(x==n+1)
continue;
if(x==r){
mp[a]=dp[x-1];
dp[x]=a;
r++;
continue;
}
mp[a]=dp[x-1];
dp[x]=a;
}
cout<<r-1<<'\n';
int el=dp[r-1];
vector < int > ans;
for(int i=1;i<r;i++)
{
ans.push_back(el);
el=mp[el];
}
for(int i=ans.size()-1;i>=0;i--)
cout<<ans[i]<<" ";
return 0;
}