Cod sursa(job #1649942)

Utilizator NacuCristianCristian Nacu NacuCristian Data 11 martie 2016 15:51:05
Problema Subsir crescator maximal Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <stdio.h>

using namespace std;

int n,l=1,scmax[100010],parinte[100010],x[100010];

void citire()
{

    scanf("%d",&n);
    for(int i=1;i<=n;i++)
        scanf("%d ",&x[i]);
    scmax[1]=1;
}

int bin_srch(int k)
{
    int st=1;
    int dr=l;
    while(st<=dr)
    {
        int mij=(st+dr)/2;
        if(k>x[scmax[mij]])
            st=mij+1;
        else
            dr=mij-1;
    }
    return st;
}

void scm()
{
    for(int i=2;i<=n;i++)
    {
        int poz=bin_srch(x[i]);
        scmax[poz]=i;
        parinte[i]=scmax[poz-1];
        if(poz>l)
            l=poz;
    }
}

void afis_rec(int k)
{
    if(k)
    {
        afis_rec(parinte[k]);
        printf("%d ",x[k]);
    }
}

void afisare()
{

    int k=scmax[l];
    printf("%d\n",l);
    afis_rec(k);
}


int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    citire();
    scm();
    afisare();

    return 0;
}