Cod sursa(job #2006582)

Utilizator catalin9898Bajenaru Catalin catalin9898 Data 30 iulie 2017 20:51:49
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <cstdio>
using namespace std;
int v[100001],m[100001],p[100001];

int main()
{freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
    int n,i,j,L=0,newL,st,dr,mid;
scanf("%d",&n);
for(i=1;i<=n;i++)
    scanf("%d",v+i);

    for(i=1;i<=n;i++)
    {st=1;
    dr=L;

        while(st<=dr)
        {
        mid=(st+dr)/2;
        if(v[i]>v[m[mid]])st=mid+1;
        else dr=mid-1;
        }
        newL=st;
        m[newL]=i;
        p[i]=m[newL-1];
        if(newL>L)L=newL;
    }
    printf("%d\n",L);
    j=m[L];
    int s[L];
    for(i=L;i>0;i--)
    {s[i]=v[j];
    j=p[j];

    }
    for(i=1;i<=L;i++)
        printf("%d ",s[i]);

    return 0;
}