Cod sursa(job #2565451)

Utilizator teisanumihai84Mihai Teisanu teisanumihai84 Data 2 martie 2020 14:15:15
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, v[100010], i, dim, D[100010], k, t[100010], sol[100010];
long long st, dr;
int main()
{
    fin>>n;
    for (i=1; i<=n; i++)
        fin>>v[i];
    D[1]=1;
    dim=1;
    for (i=2; i<=n; i++)
    {
        st=1;
        dr=dim;
        while (st<=dr)
        {
            long long  mid=(st+dr)/2;
            if (v[i]>v[D[mid]])
                st=mid+1;
            else
                dr=mid-1;
        }
        if (st>dim)
        {
            t[i]=D[dim];
            D[++dim]=i;
        }
        else
        {
            D[st]=i;
            t[i]=D[st-1];
        }
    }
    fout<<dim<<"\n";
    while (D[dim]!=0)
    {
        sol[++k]=v[D[dim]];
        D[dim]=t[D[dim]];
    }
    for (i=k; i>=1; i--)
        fout<<sol[i]<<" ";
}