Cod sursa(job #3182912)

Utilizator AlexanderCernyCernaianu Alexandru AlexanderCerny Data 10 decembrie 2023 11:19:01
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,i,nr;
int v[100001];
int dp[100001];
int tata[100001];
void afisare(int k)
{
    if(k!=0)
    {
        afisare(tata[k]);
        fout<<v[k]<<" ";
    }
}
int main()
{
    fin>>n;
    nr=0;
    for(i=1;i<=n;i++)
    {
        fin>>v[i];
        int p=0;
        int st=1, dr=nr;
        while(st<=dr)
        {
            int mid=(st+dr)/2;
            if(v[dp[mid]]>=v[i])
            {
                p=mid;
                dr=mid-1;
            }
            else
                st=mid+1;
        }
        if(p==0)
        {
            dp[++nr]=i;
            tata[i]=dp[nr-1];
        }
        else
        {
            dp[p]=i;
            tata[i]=dp[p-1];
        }
    }
    fout<<nr<<'\n';
    afisare(dp[nr]);
    return 0;
}