Cod sursa(job #3366814)

Utilizator IzabelaJePloscaru Maria Izabela IzabelaJe Data 4 octombrie 2026 14:41:56
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
#define DIM 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int A[DIM],dp[DIM],tata[DIM],n,m;
void drum(int i){
    if(i!=0){
        drum(tata[i]);
        fout<<A[i]<<" ";
    }
}
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
        fin>>A[i];
    m=1;
    dp[1]=1;
    for(int i=2;i<=n;i++){
        int st=1,dr=m,mid;
        while(st<=dr){
            mid=st+(dr-st)/2;
            if(A[dp[mid]]<A[i])
                st=mid+1;
            else
                dr=mid-1;
        }
        if(st>m){
            m++;
            dp[m]=i;
        }
        else
            dp[st]=i;
        tata[i]=dp[st-1];
    }
    fout<<m<<endl;
    drum(dp[m]);
    return 0;
}