Cod sursa(job #2489911)

Utilizator iulianarsenoiuArsenoiu Iulian iulianarsenoiu Data 9 noiembrie 2019 13:11:19
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <algorithm>
#include <stack>

using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,x,i,l[100005],nr,poz,prc[100005],a[100005],b[100005],in[100005],v[100005];
stack <int> st;
void citire()
{
    for(int i=1;i<=n;i++)
        f>>a[i];
    for(int i=1;i<=n;i++)
        b[i]=a[i];
    sort(b+1,b+n+1);
    for(int i=1;i<=n;i++)
    {
        int x=a[i];
        v[i]=lower_bound(b+1,b+n+1,x)-b;
        in[v[i]]=a[i];
    }
}
int main()
{
    f>>n;
    citire();
    x=v[1];
    l[1]=x;
    nr=1;
    for(i=2;i<=n;i++)
    {
        x=v[i];
        poz=lower_bound(l+1,l+nr+1,x)-l;
        l[poz]=x;
        prc[x]=l[poz-1];
        if(poz>nr)
            nr=poz;
    }
    g<<nr<<'\n';
    x=l[nr];
    st.push(x);
    while(prc[x]!=0)
    {
        x=prc[x];
        st.push(x);
    }
    while(!st.empty())
    {
        g<<in[st.top()]<<' ';
        st.pop();
    }
    g<<'\n';
    return 0;
}