Pagini recente » Istoria paginii runda/arhiva-vianu | Cod sursa (job #1566293) | Cod sursa (job #2693138) | Cod sursa (job #2743549) | Cod sursa (job #3181268)
#include <algorithm>
#include <fstream>
#include <vector>
#define FAST ios_base::sync_with_stdio(false);
using namespace std;
using vi=vector<int>;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int N=1e5+2;
const int inf=1e9;
int n,ans,i;
int v[N],poz[N],prevv[N];
void out(int nod)
{
if(!nod)
return;
out(prevv[nod]);
cout<<v[nod]<<' ';
}
int main()
{
FAST
cin>>n;
vi dp(n+1,inf); dp[0]=-inf;
for(i=0; i<n; i++)
cin>>v[i];
for(i=0; i<n; i++)
{
int lg=upper_bound(dp.begin(),dp.end(),v[i])-dp.begin();
if(dp[lg-1]<v[i] && v[i]<dp[lg])
{
dp[lg]=v[i];
poz[lg]=i;
prevv[i]=poz[lg-1];
}
}
for(int lg=0; lg<=n; lg++)
if(dp[lg]<inf)
ans=lg;
cout<<ans<<'\n';
out(poz[ans]);
return 0;
}