Cod sursa(job #1333817)

Utilizator Miruna_DMiruna Miruna_D Data 3 februarie 2015 16:36:46
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#define Nmax 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[Nmax],n,succ[Nmax],DP[Nmax],maxim=-1, poz;
void read()
{
    fin>>n;
    int i;
    for(i=1;i<=n;i++)
        fin>>a[i];
}

void solve()
{
    ///DP[i]=lungimea celui mai lung subsir care incepe pe poz i
int i,j;
    for(i=n;i>=1;i--)
    {
        for(j=i+1;j<=n;j++)
        if(DP[i]>DP[j] && a[i]<a[j])
    {
        DP[i]=DP[j];
        succ[i]=j;
    }
    DP[i]++;
    }

  for(i=1;i<=n;i++)
   if(DP[i]>maxim)
    {
        maxim=DP[i];
        poz=i;
    }

}

void write()
{
    fout<<maxim<<'\n';
    while(poz)
    {
        fout<<a[poz];
        poz=succ[poz];
    }

}
int main()
{
    read();
    solve();
    write();
    return 0;
}