Cod sursa(job #1334590)

Utilizator Miruna_DMiruna Miruna_D Data 4 februarie 2015 15:11:26
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.86 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]++;

    }


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


}

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

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