Cod sursa(job #2422240)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 18 mai 2019 00:42:30
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define NM 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int lgm,v[NM],t[NM],dp[NM],sol[NM];
int CB(int x)
{   int st=1,dr=lgm,sol=0;
    while(st<=dr)
    {   int mij=(st+dr)/2;
        if(t[mij]<x)
        {   st=mij+1;
            sol=max(sol,mij);
        }
        else dr=mij-1;
    }
    return sol;
}
int main()
{   int n;
    f>>n;
    for(int i=1; i<=n; i++) f>>v[i];
    dp[1]=lgm=1;
    t[1]=v[1];
    for(int i=2; i<=n; i++)
    {   int poz=CB(v[i]);
        if(poz==lgm) lgm++;
        dp[i]=poz+1;
        t[poz+1]=v[i];
    }
    int poz=0;
    for(int i=1; i<=n; i++)
        if(dp[i]>dp[poz]) poz=i;
    g<<dp[poz]<<'\n';
    int lg=dp[poz],k=0;
    for(int i=poz; lg; i--)
        if(dp[i]==lg) sol[++k]=v[i],lg--;
    ///for(int i=1; i<=n; i++) g<<dp[i]<<' ';
    while(k) g<<sol[k--]<<' ';
    return 0;
}