Cod sursa(job #2242203)

Utilizator ptudortudor P ptudor Data 18 septembrie 2018 08:45:29
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#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();
    }
}