Cod sursa(job #2216182)

Utilizator mjmilan11Mujdar Milan mjmilan11 Data 25 iunie 2018 19:21:55
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

const int NMAX = 100005;
const int INF = 2000000005;

int v[NMAX],a[NMAX],afis[NMAX],x[NMAX];

int cautbin(int x)
{
    int st=1,sol=1;
    int dr=NMAX-5,mij;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(x<=v[mij])
        {
            dr=mij-1;
            sol=mij;
        }
        else if(x>v[mij])
        {
            st=mij+1;
        }
    }
    return sol;
}

int main()
{
    int n;
    fin >> n;
    for(int i=1;i<=NMAX-5;i++) v[i]=INF;
    for(int i=1;i<=n;i++)
    {
        fin >> x[i];
        int k=cautbin(x[i]);
        v[k]=x[i];
        a[i]=k;
    }
    int lungime=0;
    for(int i=1;i<=n;i++)
    {
        if(v[i]==INF) break;
        lungime=i;
    }
    fout << lungime << '\n';
    int last=INF,ind=0;
    for(int i=n;i>=1;i--)
    {
        if(a[i]==lungime and x[i]<last)
        {
            last=x[i];
            afis[++ind]=last;
            lungime--;
        }
    }
    for(int i=ind;i>=1;i--)
    {
        fout << afis[i] << ' ';
    }
    return 0;
}