Cod sursa(job #1319866)

Utilizator RaulBodrogeanMircea-Raul Bodrogean RaulBodrogean Data 17 ianuarie 2015 14:15:08
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int n,v[100005],pred[100005],dp[100005],poz,rez,i,j,sol[100005];
int main()
{
    int maxim=0,maximi=0;
    in>>n;
    for(i=1;i<=n;i++)
    {
        in>>v[i];
    }
    dp[1]=1;
    pred[1]=0;
    for(i=2;i<=n;i++)
    {
        maxim = 0;
        poz = 0;
        for(j=1;j<i;j++)
            if(dp[j]>maxim && v[j]<v[i])
            {
                maxim = dp[j];
                poz=j;
            }
            dp[i]=maxim+1;
            pred[i]=poz;
    }
            maximi=0;

    for(i=1;i<=n;i++)
    {
        if(dp[i]>maximi)
            maximi=dp[i],poz=i;

    }
    i=1;
    while(poz)
    {
        sol[i]=poz;
        poz=pred[poz];
        i++;
    }
    for (int st = 1, dr = i - 1; st <= dr; ++st, --dr)
        swap(sol[st], sol[dr]);
    out<<maximi << "\n";
    for(i=1;i<=maximi;i++)
    {
        out<<v[sol[i]]<<" ";
    }
    return 0;
}