Cod sursa(job #1563717)

Utilizator SmitOanea Smit Andrei Smit Data 6 ianuarie 2016 15:50:22
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

int n,k,a[100003],d[100003],poz[100003],sol[100003];

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

inline void Solutie()
{
    int i,x,p;
    d[1]=a[1];
    poz[1]=1;
    k=1;
    for(i=2;i<=n;++i)
    {
        x=a[i];
        if(x>d[k])
        {
            d[++k]=x;
            poz[i]=k;
        }
        else    if(x<=d[1])
        {
            d[1]=x;
            poz[i]=1;
        }
        else
        {
            p=lower_bound(d+1,d+k+1,x)-d;
            d[p]=x;
            poz[i]=p;
        }
    }
}

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

int main()
{
    Citire();
    Solutie();
    Afisare();
    return 0;
}