Cod sursa(job #1319861)

Utilizator RaulBodrogeanMircea-Raul Bodrogean RaulBodrogean Data 17 ianuarie 2015 14:11:39
Problema Subsir crescator maximal Scor 35
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 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 max=0,maxi=0;
    in>>n;
    for(i=1;i<=n;i++)
    {
        in>>v[i];
    }
    dp[1]=1;
    pred[1]=0;
    for(i=2;i<=n;i++)
    {
        max = 0;
        for(j=1;j<i;j++)
            if(dp[j]>max && v[j]<v[i])
            {
                max = dp[j];
                poz=j;
            }
            dp[i]=max+1;
            pred[i]=poz;
    }
            maxi=0;

    for(i=1;i<=n;i++)
    {
        if(dp[i]>maxi)
            maxi=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<<maxi << "\n";
    for(i=1;i<=maxi;i++)
    {
        out<<v[sol[i]];
    }
    return 0;
}