Cod sursa(job #2575924)

Utilizator Alex100Alexandru Mihai Alex100 Data 6 martie 2020 16:14:43
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <bits/stdc++.h>
#define MAX 100100
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int best[MAX],a[MAX],poz[MAX],s[MAX];
int n,nr,lgmax;
int cautbin(int x);
int main()
{
    int i,cine,pozitie;
    fin>>n;
    for(i=1;i<=n;i++)
        fin>>a[i];
    best[1]=a[1];
    poz[1]=1;
    lgmax=1;
    for(i=2;i<=n;i++)
        if(a[i]>best[lgmax])
    {
        best[++lgmax]=a[i];
        poz[i]=lgmax;
    }
    else
    {
        pozitie=cautbin(a[i]);
        best[pozitie]=a[i];
        poz[i]=pozitie;
    }
    cine=lgmax;nr=0;
    for(i=n;i>=1&&cine;i--)
        if(poz[i]==cine)
    {
        s[nr]=a[i];
        cine--;nr++;
    }
    fout<<nr<<'\n';
    for(i=nr-1;i>=0;i--)
        fout<<s[i]<<' ';
}
int cautbin(int x)
{
    int st=0,dr=lgmax+1,mij;
    while(dr-st>1)
    {
        mij=(st+dr)/2;
        if(best[mij]>=x)
            dr=mij;
        else
            st=mij;
    }
    return dr;
}