Cod sursa(job #2496886)

Utilizator andreicadarCadar Andrei andreicadar Data 21 noiembrie 2019 20:01:08
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.15 kb
#include <bits/stdc++.h>

using namespace std;

#define newline '\n'

ifstream f("scmax.in");
ofstream g("scmax.out");

int numere[100001],numar_de_numere,dp[100001];

void Write(int number_of_numbers, int pos);

void Read()
{
    f>>numar_de_numere;
    for(int i = 1; i <= numar_de_numere; i++)
        f>>numere[i];
}

void Solve_One_Iteration()
{
    int i, j, maxim_f_dp, solution[100001], position;

    maxim_f_dp = 0;
    dp[numar_de_numere] = 1;
    position = numar_de_numere;

    for(i = numar_de_numere-1; i >= 1; i--)
    {
        dp[i] = 1;
        for(j = i+1; j <= numar_de_numere; j++)
            if(numere[i] < numere[j])
                {
                    if(dp[i] < dp[j]+1)
                        {
                            dp[i] = dp[j]+1;
                            if(dp[i] > maxim_f_dp)
                                {
                                    position = i;
                                    maxim_f_dp = dp[i];

                                }
                        }
                }
    }

    for(i=1;i<=numar_de_numere;i++)
        cout<<dp[i]<<" ";
    g<<maxim_f_dp<<newline;

    Write(maxim_f_dp,position);


}

void Write(int number_of_numbers,int pos)
{

    for(int i = pos;i<=numar_de_numere && number_of_numbers != 0;i++)
        if(dp[i]==number_of_numbers)
            {
                g<<numere[i]<<" ";
                number_of_numbers--;
            }


}

/*void Solve()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        dp[i] = 1;
        for(j=1;j<=i;j++)
            if(v[j]<v[i])
                {
                    if(dp[j]+1 > dp[i])
                        dp[i] = dp[j]+1;
                }

    }
    int mx = 0;
    int poz_sol=1;
    vector <int> sol;
    for(i=1;i<=n;i++)
        {
            if(mx<dp[i])
                mx = dp[i];

        }

    for(i=n;i>=1;i--)
        if(dp[i]==mx)
    {
        sol.push_back(v[i]);

        mx--;
    }

    g<<sol.size()<<endl;


    for(i=sol.size()-1;i>=0;i--)
        g<<sol[i]<<" ";


}*/

int main()
{
    Read();
    Solve_One_Iteration();
}