Cod sursa(job #1654681)

Utilizator ericutzdevilEric Spataru ericutzdevil Data 17 martie 2016 12:47:06
Problema Subsir crescator maximal Scor 90
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 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,m,poz2,c;

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){
            m=(l1+l2)/2;
            if(q[m]>v[i]){
                l2=m-1;
                poz2=m;}
            else
                l1=m+1;}
            q[poz2]=v[i];
            p[i]=poz2;}
    }

c=poz;
poz=0;

printf("%d\n",c);
for(i=n;i>=1&&c!=0;i--)
    if(p[i]==c){
        vec[++poz]=v[i];
        c--;}

    for(i=poz;i>=1;i--)
        printf("%d ",vec[i]);

return 0;
}