Cod sursa(job #1853695)

Utilizator abccnuCamelia Zalum abccnu Data 21 ianuarie 2017 23:18:20
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int NMAX=100000+5;

int a[NMAX], tata[NMAX], sol[NMAX], k, n, prim;
bool vis[NMAX];

void dinam()
{
    sol[n]=1;
  tata[n]=-1;
   prim=n;
    int i , j;
    for (i = n-1 ; i > 0; --i)
    {

sol[i]=1;
   tata[i]=-1;
        for (j = i+1; j <= n; ++j)
        {
            if (a[i] < a[j] && sol[i]<sol[j]+1)
            {
                sol[i] =  sol[j]+1;
                tata[i] = j;
            }
            if(k<sol[i])
            {
                k=sol[i];
                prim=i;
            }
        }
    }

}

int main()
{
    f >> n;
    for (int i = 1; i <= n; ++i)f >> a[i];


    dinam();

    fout << k << "\n";
    for (int i = prim; i != -1; i=tata[i])fout << a[i]<< " ";
    return 0;
}