Cod sursa(job #3322376)

Utilizator Minea_TheodorMinea Theodor Stefan Minea_Theodor Data 13 noiembrie 2025 18:17:07
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.1 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100005];
const int INF=2e9+1;
vector<int> dp;
int cautbin(int val)
{
    int st = 0, dr = dp.size()-1;
    int rez=dp.size();
    while(st<=dr)
    {
        int mij = (st+dr)/2;
        if(dp[mij] >= val)
        {
            dr=mij-1;
            rez=mij;
        }
        else
            st=mij+1;
    }
    return rez;
}
int poz[100005];
int lant[100005];
int main()
{
    int n;
    fin >> n;
    for(int i=1; i <= n; i++)
        fin >> v[i];
    for(int i=1; i <= n; i++)
    {
        int it = cautbin(v[i]);
        if(it==dp.size())
            dp.push_back(v[i]);
        else
            dp[it]=v[i];
        poz[it]=i;
        if(it>0)
            lant[i]=poz[it-1];
    }
    vector<int> afis;
    fout << dp.size() << '\n';
    int root = poz[dp.size()-1];
    while(root)
    {
        afis.push_back(v[root]);
        root = lant[root];
    }
    reverse(afis.begin(), afis.end());
    for(auto I : afis)
        fout << I << " ";
    return 0;
}