Pagini recente » Cod sursa (job #3329123) | Cod sursa (job #2092981) | Cod sursa (job #2227617) | Cod sursa (job #1197527) | Cod sursa (job #2175792)
#include <bits/stdc++.h>
#define MAX 100010
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,v[MAX],d[MAX],pred[MAX],ans[MAX],m,q;
void scmax()
{
int pas,j=0;
//d[1]=1,m=1;
for(int i=1;i<=n;++i)
{
pas=1<<20;
for(j=0;pas;pas>>=1)
if(j+pas<=m&&v[d[j+pas]]<v[i])
j+=pas;
if(j==m)
++m;
pred[i]=d[j];
d[j+1]=i;
}
}
int main()
{
f>>n;
for(int i=1;i<=n;++i)
f>>v[i];
memset(pred,-1,sizeof(pred));
scmax();
g<<m<<"\n";
for(int i=d[m];i>=1;i=pred[i])
ans[++q]=v[i];
for(int i=m;i>=1;--i)
g<<ans[i]<<" ";
return 0;
}