Cod sursa(job #1634513)

Utilizator GinguIonutGinguIonut GinguIonut Data 6 martie 2016 14:02:04
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <fstream>
#define nMax 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, k, val[nMax], a[nMax], b[nMax], Sol[nMax], pozi;
int main()
{
    fin>>n;
    for(int i=1;i<=n;i++)
    {
        fin>>val[i];
        int st=1, dr=k, poz=0;
        while(st<=dr)
        {
            int mid=st+(dr-st)/2;
            if(a[mid]>=val[i])
            {
                poz=mid;
                dr=mid-1;
            }
            else
                st=mid+1;
        }
        if(poz==0)
        {
            a[++k]=val[i];
            b[i]=k;
            pozi=i;
        }
        else
        {
            a[poz]=i;
            b[i]=poz;
        }
    }
    fout<<k<<'\n';
    for(int i=pozi;i>=1 && k>0;i--)
    {
        if(b[i]==k)
        {
            Sol[k]=i;
            k--;
        }
    }
    for(int i=1;val[Sol[i]]!=0;i++)
        fout<<val[Sol[i]]<<" ";
    return 0;
}