Cod sursa(job #1876881)

Utilizator FlowstaticBejan Irina Flowstatic Data 12 februarie 2017 18:31:28
Problema Subsir crescator maximal Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <fstream>
#include<vector>
#define NMAX 100005
#define FOR(i,a,b) for(int i= a; i<=b; i++)
using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[NMAX],best[NMAX], pre[NMAX];
vector<int> ssol;
int N;
//best[i] = lungimea maxima a unui subsir crescator care se termina pe pozitia i
int main()
{
    fin>>N;
    FOR(i,1,N)
    {
        fin>>a[i];
        best[i] = 1;
    }

    int sol = 1, psol = 1;
    FOR(i,2,N)
    {
        best[i] = 0;
        FOR(j,1,i-1)
            if(a[j]<a[i])
            {
                if(1+best[j] > best[i])
                {
                    best[i] = 1+best[j];
                    pre[i] = j;
                }
            }
        if(best[i] > sol)
        {
            sol = best[i];
            psol = i;
        }
    }


    while(psol)
    {
        ssol.push_back(a[psol]);
        psol = pre[psol];
    }

    fout<<ssol.size()<<'\n';

    for(int i = ssol.size()-1; i>=0;i--)
        fout<<ssol[i]<<" ";
    fout<<'\n';
    return 0;
}