Cod sursa(job #2575538)

Utilizator dogaru_roxanaDogaru Roxana dogaru_roxana Data 6 martie 2020 14:12:48
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <fstream>
using namespace std;

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

int n, v[100005], s[100005], nr, poz[100005], ls, ld, mij;

void reconst (int lung, int inc)
{
    int i;

    if (lung!=0)
    {
        i=inc;
        while (poz[i]!=lung)
        {
            i--;
        }

        reconst(lung-1, i-1);
        fout<<v[i]<<" ";
    }
}

int main()
{
    int i;

    fin>>n;

    for (i=1; i<=n; i++)
    {
        fin>>v[i];
    }

    nr=1;
    s[1]=v[1];
    poz[1]=1;

    for (i=2; i<=n; i++)
    {
        if (v[i]>s[nr])
        {
            nr++;
            s[nr]=v[i];
            poz[i]=nr;
        }
        else
        {
            ls=1; ld=nr;
            while (ls<=ld)
            {
                mij=(ls+ld)/2;

                if (v[i]==s[mij])
                {
                    ls=mij;
                    ld=mij-1;
                }
                else
                {
                    if (v[i]>s[mij])
                        ls=mij+1;
                    else
                        ld=mij-1;
                }
            }
            s[ls]=v[i];
            poz[i]=ls;
        }
    }

    fout<<nr<<'\n';

    reconst(nr, n);

    fin.close();
    fout.close();
    return 0;
}