Cod sursa(job #3364296)

Utilizator Dariuscriss72Popescu Darius Mihai Dariuscriss72 Data 1 septembrie 2026 11:57:52
Problema Subsir crescator maximal Scor 25
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb

#include <bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define cin f
#define cout g
#define int long long
#define inf 1e9
int dp[100005],i,j,k,n,m,a[100005],ultim[100005],p[100005];
signed main()
{
    cin>>n;
    dp[0]=-inf;
    for(i=1;i<=n;i++){
        dp[i]=inf;
    }
    for(i=1;i<=n;i++){
        cin>>a[i];
    }
    for(i=1;i<=n;i++){
        int l=upper_bound(dp+1,dp+n+1,a[i])-(dp);
        if(dp[l-1]<a[i] && a[i]<dp[l]){
        dp[l]=a[i];
        p[a[i]]=dp[l-1];
        }
    }
    int element,ct;
    for(i=n;i>=1;i--){
        if(dp[i]!=inf){
            cout<<i;
            ct=i;
            element=dp[i];
            break;
        }
    }
    cout<<"\n";
    int aux=element;
    vector<int> inv;
    for(i=1;i<=ct;i++){
        inv.push_back(aux);
        //cout<<aux<<" ";
        aux=p[aux];
    }
    for(i=inv.size()-1;i>=0;i--){
        cout<<inv[i]<<" ";
    }
    return 0;
}