Cod sursa(job #2553666)

Utilizator TudorChirila11Tudor Chirila TudorChirila11 Data 22 februarie 2020 10:59:16
Problema Subsir crescator maximal Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N=100005;
int poz[N], a[N], i, j, n, m,mx, best[N], k, sol[N], p;
int cautbin(int l, int r, int x)
{
    while(l<r)
    {
        int m=(l+r)/2;
        if(a[m]>x)
            r=m;
        else l=m+1;
    }
    return l;
}
int main()
{
    fin>>n;
    for(i=1;i<=n;++i)
        fin>>a[i];
    best[1]=a[1], poz[1]=1;
    k=1;
    for(i=2;i<=n;++i)
    {
        if(a[i]>best[k])
            {
                best[++k]=a[i];
                poz[i]=k;
            }
        else
        {
            int pz=cautbin(1,k,a[i]);
            best[pz]=a[i];
            poz[i]=pz;
        }
    }
    for(i=n;i>=1;--i)
        if(poz[i]==k)
            sol[++p]=a[i],--k;
    fout<<p<<'\n';
    for(i=p;i>=1;--i)
        fout<<sol[i]<<' ';
    return 0;
}