Cod sursa(job #1356974)

Utilizator sorynsooSorin Soo sorynsoo Data 23 februarie 2015 18:04:30
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");

#define nmax 100010

int n,v[nmax],poz[nmax],pred[nmax],s[nmax],k,t,l,p,u,mij;
int i,j,val, st,dr;

int bsearch(int st, int dr, int nr)
{
    int mij=(st+dr)/2;
    if(st>dr)
        return st;

    if (nr<=v[poz[mij]])
        bsearch(st, mij-1,nr);
    else
        bsearch(mij+1,dr,nr);
}
int main()
{
    cin>>n;
    for (i=1;i<=n;i++)
        cin>>v[i];
    poz[1]=1;
    l=1;
    for (i=2;i<=n;i++)
    {
        val=bsearch(1,l,v[i]);
        pred[i]=poz[val-1];
        poz[val]=i;
        if (val>l)
            l=val;
    }
    k=poz[l];
    for (i=l;i;i--)
    {
        s[i]=v[k];
        k=pred[k];
    }
    cout<<l<<'\n';
    for (i=1;i<=l;i++)
        cout<<s[i]<<" ";
}