Cod sursa(job #1409835)

Utilizator marcdariaDaria Marc marcdaria Data 30 martie 2015 18:55:10
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>
#define N 100003
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n,r,v[N],b[N],l[N];

int search(int k)
{
    int a=1,b=r,m;
    while(a<b)
    {
        m=(a+b)/2;
       if(k>l[m])
        a=m+1;
        if(k<=l[m])
            b=m;
    }
    return a;
}

void show(int k, int h)
{
    if(k)
    {
        while(b[h]!=k)
            h--;
        show(k-1,h-1);
        cout<<v[h]<<" ";
    }
}

int main()
{
    int i,j,p;
    cin>>n;
    for(i=1;i<=n;i++)
        cin>>v[i];
    l[++r]=v[1];
    b[1]=1;
    for(i=2;i<=n;i++)
    {
        if(v[i]>l[r])
        {
            r++;
            l[r]=v[i];
            b[i]=r;
        }
        else
        {
            p=search(v[i]);
            if(l[p]>v[i])
                l[p]=v[i];
            b[i]=p;
        }
    }
    cout<<r<<'\n';
    show(r,n);
    return 0;
}