Cod sursa(job #2422238)

Utilizator GabyD002Dobrita Gabriel GabyD002 Data 18 mai 2019 00:34:08
Problema Subsir crescator maximal Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 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];
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';
    vector <int> sol;
    for(int i=1,j=1; j<=poz; i++)
        if(dp[i]==j) sol.push_back(v[i]),j++;
    for(int i=0; i<sol.size(); i++) g<<sol[i]<<' ';
    return 0;
}