Cod sursa(job #3314503)

Utilizator VladStroica1234Vlad Stroica VladStroica1234 Data 10 octombrie 2025 11:12:04
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.42 kb
#include <bits/stdc++.h>
using namespace std;
const int Maxm=100005;
int v[Maxm], dp[Maxm];
int prec[Maxm];
int rez[Maxm];
int dr=0;
int main() {
    ifstream cin("scmax.in");
    ofstream cout("scmax.out");
    int n;
    cin>>n;
    for(int i=1; i<=n; i++)
        cin>>v[i];
    for(int i=1; i<=n; i++)
    {
        int st=0,dr2=dr+1;
        if(dr==0)
        {
            dp[1]=i;
            dr++;
        }
        else
        {

            while(dr2-st>1)
            {
                int mij=(st+dr2)/2;
                if(v[dp[mij]]>=v[i])
                {
                    dr2=mij;
                }
                else
                    st=mij;
            }
            if(dp[st+1]==0)
            {
                dp[st+1]=i;
                dr++;
                prec[i]=dp[st];
            }
            else
            {
                dp[st+1]=i;
                prec[i]=dp[st];
            }
        }
    }
// for(int i=1;i<=n;i++)
// cout<<dp[i]<<" ";
    int maxm=0,maxpoz=0;
    for(int i=1;i<=n;i++)
    {
        if(dp[i]!=0)
        {
            maxpoz=dp[i];
            maxm=i;
        }
    }
    int y=0;
    while(prec[maxpoz]!=0)
    {
        rez[y]=v[maxpoz];
        y++;
        maxpoz=prec[maxpoz];
    }
    rez[y]=v[maxpoz];
        y++;
    cout<<maxm<<endl;
    for(int i=y-1;i>=0;i--)
        cout<<rez[i]<<" ";
    return 0;
}