Cod sursa(job #1353572)

Utilizator EberardoVladianu Cosmin Eberardo Data 21 februarie 2015 14:25:47
Problema Subsir crescator maximal Scor 95
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,a[100001],m[100001],scm[100001];
#define inf 2000000002
void citire()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];

}
void afis(int lscm,int poz)
{
    int i;
    fout<<a[poz]<<" ";
    lscm--;
    while(lscm)
    {
        i=poz;
        while(scm[i]!=lscm)
            i++;
        poz=i;
        fout<<a[poz]<<" ";
        lscm--;
    }
}
void rez()
{
    scm[n]=1;
    m[1]=a[n];
    m[0]=inf;
    int lscm=1,poz,i;
    for(i=n-1;i;i--)
    {
        int t=lscm;
        while(a[i]>=m[t])
            t--;
        scm[i]=t+1;
        m[scm[i]]=max(m[scm[i]],a[i]);
       if(lscm<scm[i])
       {
           poz=i;
           lscm=scm[i];
       }

    }
    fout<<lscm<<endl;
    afis(lscm,poz);

}
int main()
{
    citire();
    rez();

    return 0;
}