Cod sursa(job #2147694)

Utilizator alexdumitrescuDumitrescu George Alex alexdumitrescu Data 28 februarie 2018 21:54:12
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.13 kb
#include <fstream>

using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int l, q[100005], a[100005], i, n, nr, poz[100005], L[100005];
int cautbinar(int x)
{
    int dr=l;
    int st=1;
    int nr=-1;
    int mij;
    while(st<=dr)
    {
        mij=(dr+st)/2;
        if(q[mij]==x)
            {
                nr=mij;
                return nr;
            }
        else if(q[mij]>=x)
        {
            nr=mij;
            dr=mij-1;
        }
        else st=mij+1;
    }
    return nr;
}
int main()
{
    fin >> n;
    for(i=1;i<=n;i++)
        fin >> a[i];
    q[1]=a[1];
    l=1;
    L[1]=1;
    for(i=2;i<=n;i++)
    {
        nr=cautbinar(a[i]);
        if(nr==-1)
        {
            l++;
            L[i]=l;
            q[l]=a[i];
        }
        else {
                q[nr]=a[i];
                L[i]=nr;
        }
    }
    fout << l << '\n';
    nr=l;
    for(i=n;i>=1;i--)
        if(L[i]==l)
            {
                poz[l]=i;
                l--;
            }

    for(i=1;i<=nr;i++)
        fout << a[poz[i]] << ' ';
    return 0;
}