Cod sursa(job #1221188)

Utilizator acomAndrei Comaneci acom Data 19 august 2014 20:23:55
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include<cstdio>
#include<vector>
using namespace std;
#define NMAX 100005
vector <int> V;
vector <int>::reverse_iterator it;
int n,x,k,st,dr,mij,Lmax,a[NMAX],v[NMAX],p[NMAX];
int main()
{
    int i;
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    scanf("%d",&n);
    for (i=1;i<=n;++i)
    {
        scanf("%d",&x);
        a[i]=x;
        if (x>v[k]) v[++k]=x, p[i]=k;
        else
        {
            st=1, dr=k;
            while (st<=dr)
            {
                mij=(st+dr)>>1;
                if (v[mij]>=x) dr=mij-1;
                else st=mij+1;
            }
            v[st]=x, p[i]=st;
        }
        if (k>Lmax) Lmax=k;
    }
    printf("%d\n",Lmax);
    for (i=n;i>0 && Lmax;--i)
        if (p[i]==Lmax)
        {
            V.push_back(a[i]);
            --Lmax;
        }
    for (it=V.rbegin();it!=V.rend();++it)
        printf("%d ",*it);
    printf("\n");
    return 0;
}