Pagini recente » Rezultatele filtrării | Rezultatele filtrării | Cod sursa (job #2815176) | Cod sursa (job #2682506) | Cod sursa (job #2242203)
#include <bits/stdc++.h>
using namespace std;
stack <int> q;
int n,a[100005],dp[100005],pre[100005];
int main()
{int i,j;
ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
for (i=1;i<=n;i++)
in>>a[i];
a[n+1]=2000000001;
for (i=2;i<=n+1;i++)
{
for (j=1;j<i;j++)
{
if (a[j]<a[i]&&(dp[j]+1>dp[i]))
{dp[i]=dp[j]+1; pre[i]=j;}
if ((a[j]<a[i])&&(dp[j]>dp[i]))
{dp[i]=dp[j]; pre[i]=j;}
}
}
out<<dp[n+1]<<"\n";
int k=dp[n+1];
i=pre[n+1];
while (k>0)
{
q.push(a[i]);
i=pre[i];
k--;
}
while (!q.empty())
{
out<<q.top()<<" ";
q.pop();
}
}