Cod sursa(job #2153778)

Utilizator bebeetarepredescu bebeetare Data 6 martie 2018 14:14:14
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>

using namespace std;
int n,i,vf,a[100005],s[100005],poz,Max,b[100005],pozmax,nr;
ifstream f("scmax.in");
ofstream g("scmax.out");
int cmp(int x)
{
    int dr=vf,st=1,mij,poz=0;
    while(st<=dr)
    {
        mij=(dr+st)/2;
        if(s[mij]<x) st=mij+1;
        else if(s[mij]>x)
        {
            dr=mij-1;
            poz=mij;
        }
        else
        {
            poz=mij;
            break;
        }
    }
    return st;
}
int main()
{

    f>>n;
    for(i=1;i<=n;i++)
    {
        f>>a[i];
    }
    for(i=1;i<=n;i++)
    {
        poz=cmp(a[i]);
        if(poz==0)
        {
            vf=1;
            s[vf]=a[i];
            b[i]=vf;
        }
        else
        {
            s[poz]=a[i];
            vf=poz;
            b[i]=poz;
        }
        if(poz>vf)vf++;
        if(poz>Max)
        {
            Max=poz;
            pozmax=i;
        }
    }
    g<<Max<<'\n';
    for(i=pozmax;i>=1 && Max>0;i--)
    {
        if(b[i]==Max)
        {
            s[++nr]=a[i];
            Max--;
        }
    }
    for(i=nr;i>=1;i--)
    {
        g<<s[i]<<" ";
    }
    return 0;
}