Cod sursa(job #2452500)

Utilizator verde.cristian2005Verde Flaviu-Cristian verde.cristian2005 Data 30 august 2019 22:59:46
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int v[100001],mini[100001],m,afis[100001],inainte[100001];
int cautbin(int val)
{
    int pas=1<<16,r=0;
    while(pas)
    {
        if(r+pas<=m&&v[mini[r+pas]]<val)
            r+=pas;
        pas/=2;
    }
    return r;
}
int main()
{
    int n,i,x,cnt=0,poz;
    in>>n;
    for(i=1; i<=n; i++)
        in>>v[i];
    for(i=1; i<=n; i++)
    {
        x=cautbin(v[i]);
        if(x==m)
        {
            mini[++m]=i;
            inainte[i]=mini[m-1];
        }
        else
        {
            mini[x+1]=i;
            inainte[i]=mini[x];
        }
    }
    out<<m<<'\n';
    poz=mini[m];
    while(poz!=0)
    {
        afis[++cnt]=v[poz];
        poz=inainte[poz];
    }
    for(i=cnt; i>=1; i--)
        out<<afis[i]<<" ";
    return 0;
}