Cod sursa(job #1609672)

Utilizator Vlad_lsc2008Lungu Vlad Vlad_lsc2008 Data 22 februarie 2016 22:25:40
Problema Subsir crescator maximal Scor 65
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <cstdio>
#include <stack>
#include <iostream>
#include <vector>
#define inf 0x3fffffff
using namespace std;

int n, v[100010],p[100010],len;
int sol[100010];

int pozitie(int val,int st,int dr)
{
    int mid=(st+dr)/2;
    if(st==dr)
    {
        if(sol[st]==inf) len++; sol[len]=inf;
        sol[st]=val;
        return st;
    }
    else if(sol[mid]<val) pozitie(val,mid+1,dr);
                     else pozitie(val,st,mid);
}

int construct(int lun)
{
    for(int i=n;i>=1;i--)
        if(p[i]==lun)
        {
            construct(lun-1);
            cout<<v[i]<<' ';
            break;
        }
}

int main()
{
    freopen("scmax.in","r",stdin);
    freopen("scmax.out","w",stdout);
    cin>>n;
    len=1;
    sol[2]=inf; sol[1]=inf;
    int i;
    for(i=1;i<=n;i++)
    {
        cin>>v[i];
        p[i]=pozitie(v[i],1,len);
    }
    len--;
    cout<<len<<'\n';
    construct(len);
    fclose(stdin);
    fclose(stdout);
    return 0;
}