Cod sursa(job #996795)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 12 septembrie 2013 17:29:56
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <algorithm>

using namespace std;

int n,v[100005],len,l[100005],poz[100005],a[100005];

inline void Read()
{
    int i;
    ifstream fin("scmax.in");
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>v[i];
    fin.close();
}

inline int Bsearch(int x)
{
    int *p;
    if(x==l[len])
        return len;
    if(x>l[len])
        return len+1;
    p=upper_bound(l+1,l+len+1,x);
    return p-l;
}

inline void Solve()
{
    int i,p;
    l[1]=v[1];len=1;poz[1]=1;
    for(i=2;i<=n;i++)
    {
        p=Bsearch(v[i]);
        l[p]=v[i];
        poz[i]=p;
        if(len<p)
            len=p;
    }
}

inline void Afisare()
{
    ofstream fout("scmax.out");
    int i,lg;
    lg=len;
    for(i=n;i>0;i--)
        if(poz[i]==lg)
        {
            a[lg]=v[i];
            lg--;
        }
    fout<<len<<"\n";
    for(i=1;i<=len;i++)
        fout<<a[i]<<" ";
    fout<<"\n";
    fout.close();
}

int main()
{
    Read();
    Solve();
    Afisare();
    return 0;
}