Pagini recente » Cod sursa (job #3004765) | Cod sursa (job #3258821) | Cod sursa (job #467763) | Cod sursa (job #2572172) | Cod sursa (job #575215)
Cod sursa(job #575215)
#include <stdio.h>
#include <stack>
using namespace std;
#define N 100005
int sir[N];
int cnt[N];
int prev[N];
int main ()
{ freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
int i,n,m,j;
scanf("%d",&n);
for (i=1;i<=n;i++)
{ scanf("%d",&sir[i]);
}
cnt[1]=1;
prev[1]=1;
m=1;
for (i=2;i<=n;i++)
{ for (j=m;j>=1;j--)
{
if(sir[i]>sir[cnt[j]])
{ prev[i]=cnt[j];
break;
}
}
if(j==0)
{ cnt[1]=i;
prev[i]=0;
}
else
{ if(j+1>m)
{ m=j+1;
cnt[j+1]=i;
}
else if(sir[cnt[j+1]]>sir[i])
{ cnt[j+1]=i;
}
}
}
printf("%d\n",m);
stack<int> s;
for (i=cnt[m];i!=0;i=prev[i])
{ s.push(sir[i]);
}
while(!s.empty())
{ printf("%d ",s.top());
s.pop();
}
return 0;
}