Cod sursa(job #1654281)

Utilizator MarcSpataruMarc Spataru MarcSpataru Data 16 martie 2016 22:12:01
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include<cstdio>
using namespace std;
int v[100001],q[100001],p[100001],vec[100001];
int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    int n,i,nr,poz=1,l1,l2,mij,poz2,cautat;
    scanf("%d",&n);
    for(i=1;i<=n;i++)
        scanf("%d",&v[i]);
    q[1]=v[1];
    p[1]=1;
    for(i=2;i<=n;i++)
    {
        if(v[i]>q[poz])
        {
            q[++poz]=v[i];
            p[i]=poz;
        }
        else
        {
            l1=1;
            l2=poz;
            while(l1<=l2)
            {
                mij=(l1+l2)/2;
                if(q[mij]>v[i])
                {
                    l2=mij-1;
                    poz2=mij;
                }
                else
                    l1=mij+1;
            }
            q[poz2]=v[i];
            p[i]=poz2;
        }
    }
    cautat=poz;
    poz=0;
    printf("%d\n",cautat);
    for(i=n;i>=1&&cautat;i--)
        if(p[i]==cautat)
        {
            vec[++poz]=v[i];
            cautat--;
        }
    for(i=poz;i>=1;i--)
        printf("%d ",vec[i]);
    return 0;
}