Cod sursa(job #3346738)

Utilizator Gabriel_DaescuDaescu Gabriel Florin Gabriel_Daescu Data 15 martie 2026 11:02:41
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#define NMAX 100002
using namespace std;
ifstream  fin("scmax.in");
ofstream fout("scmax.out");
int N,M,v[NMAX],dp[NMAX],pred[NMAX];

void citire()
{
    fin>>N;

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

void refacere_drum(int x)
{
    if(pred[x])
    {
        refacere_drum(pred[x]);
    }
    fout<< v[x] << " ";
}

int main()
{
    citire();

    for(int i=1; i<=N; i++)
    {
        int p1,p2,pmijl,ans;
        p1=1;
        p2=M;
        ans=M+1;

        while(p1<=p2)
        {
            pmijl=(p1+p2)/2;

            if(v[dp[pmijl]]>=v[i])
            {
                ans=pmijl;
                p2=pmijl-1;
            }
            else
            {
                p1=pmijl+1;
            }
        }

        dp[ans]=i;
        pred[i]=dp[ans-1];

        if(ans>M)
        {
            M=ans;
        }
    }

    fout<< M << "\n";

    refacere_drum(dp[M]);

    return 0;
}