Cod sursa(job #2709920)

Utilizator VipioanaMirea Oana Teodora Vipioana Data 21 februarie 2021 14:44:54
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long v[100001],l[100001],st[100001],sol[100001];
int cautb(int ls, int ld, long long x)
{
    int mij;
    while(ls<=ld)
    {
        mij=(ls+ld)/2;
        if(st[mij]<x)
            ls=mij+1;
        else
            ld=mij-1;
    }
    return ls;
}
int main()
{
    long long n,m,i,j,lm,p;
    f>>n;
    for(i=0; i<n; i++)
        f>>v[i];
    l[0]=lm=0;
    for(i=0; i<n; i++)
    {
        p=cautb(0,lm-1,v[i]);
        st[p]=v[i];
        if(p==lm)
            lm++;
        l[i]=p+1;
    }
    g<<lm<<'\n';
    p=lm;
    i=n-1;
    while(lm!=0)
    {
        if(l[i]==lm)
            sol[lm--]=v[i];
        i--;
    }
    for(i=1; i<=p; i++)
        g<<sol[i]<<" ";
    return 0;
}