Cod sursa(job #3220524)

Utilizator tudoor_balasescuBalasescu Tudor tudoor_balasescu Data 3 aprilie 2024 22:05:51
Problema Subsir crescator maximal Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <fstream>

using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,j,smax,lgb,pozvi,v[100001],best[100001],poz[100001],sol[100001];
int cb(int x)
{
    int st=1,dr=lgb,mij, pozx;
    while(st<=dr)
    {
        mij=(st+dr)/2;
        if(x<best[mij])
        {
            dr=mij-1;
            pozx=mij;
        }
        else if(x>=best[mij])
        {
            st=mij+1;
        }
    }
    return pozx;
}
int main()
{
    fin>>n;
    for(i=1; i<=n; i++)
        fin>>v[i];
    best[1]=v[1];
    lgb=poz[1]=1;
    for(i=2; i<=n; i++)
        if(v[i]>best[lgb])
            best[++lgb]=v[i],poz[i]=lgb;
        else
        {
            pozvi=cb(v[i]);
            best[pozvi]=v[i];
            poz[i]=pozvi;
        }
    fout<<lgb;


    //daca vrei sa recreezi sirul
    fout<<'\n';
    for(j=n, i=lgb; i>0; j--)
        if(poz[j]==i)
            sol[i]=v[j],i--;
    for(i=1; i<=lgb; i++)
        fout<<sol[i]<<' ';

    return 0;
}