Cod sursa(job #2828356)

Utilizator NutaAlexandruASN49K NutaAlexandru Data 7 ianuarie 2022 09:35:29
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
using namespace std;
//////////////////////////////////////////////////////
ifstream cin("peri.in");
ofstream cout("peri.out");
const int N=1e5+1;
int a[N],lung[N],valmin[N],c;

int caut(int x)
{
    int l=1,r=c,rez=0;
    while(l<=r)
    {
        int m=(l+r)/2;
        if(valmin[m]<x)
        {
            rez=m;
            l=m+1;
        }
        else
        {
            r=m-1;
        }
    }
    return rez;
}
void rasp(int i)
{
    int p=i-1;
    while (p>=0&&(a[p]>=a[i] || lung[p]!=lung[i]-1))
    {
        p--;
    }
    if (p>=0)
    {
        rasp(p);
    }
    cout<<a[i]<<" ";
}
int main()
{
    int n;
    cin>>n;
    int maxx=0;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
        int m=caut(a[i]);
        lung[i]=m+1;
        if(m==c)
        {
            c++;
        }
        valmin[m+1]=a[i];
        if(lung[i]>lung[maxx])
        {
            maxx=i;
        }
    }
    cout<<lung[maxx]<<"\n";
    rasp(maxx);
    return 0;
}