Cod sursa(job #2738930)

Utilizator MoldovanAndrei1Moldovan Andrei MoldovanAndrei1 Data 6 aprilie 2021 16:03:59
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX  =1e5;
int v[NMAX+5],poz[NMAX+5];
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n , m , i , j  ,a , b , c;
    scanf("%d",&n);
    vector<int>s;
    for(i=1;i<=n;i++)
    {
        scanf("%d",&v[i]);
        if(s.empty())
        {
            poz[i]=1;
            s.push_back(v[i]);
            continue;
        }
        if(v[i] > s[s.size()-1])
        {
            s.push_back(v[i]);
            poz[i] = s.size();
            continue;
        }
        vector<int>::iterator it;
        it=lower_bound(s.begin(),s.end(),v[i]);
        s[it-s.begin()]=v[i];
        poz[i]=it-s.begin()+1;
    }
    int max1 =0 ;
    for(i=1;i<=n;i++)max1=max(max1,poz[i]);
    cout<<max1<<endl;
    stack<int>st;
    for(i=n;i>0;--i)
        if(poz[i]==max1)
    {
        --max1;
        st.push(v[i]);
    }
    while(!st.empty())
    {
        printf("%d ",st.top());
        st.pop();
    }
    return 0;
}