Cod sursa(job #1814368)

Utilizator GeanaVladGeana Vlad GeanaVlad Data 23 noiembrie 2016 21:54:12
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include<fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,i,v[100001],d[100001],j,mx,pmax,p,ans[100001],k;
int caut_bin(int ls,int ld)
{
    if(ls<=ld)
    {
        int m=(ls+ld)/2;
        if(d[m]+1 > d[i] && v[i] > v[m])
        {
            pmax=m;
            caut_bin(m+1,ld);
        }
        else
        {
            caut_bin(ls,m-1);
        }
    }
    return pmax;
}
int main()
{
    f>>n;
    for(i=1; i<=n; i++)
        f>>v[i],d[i]=1;
    for(i=1; i<=n; i++)
    {
        j=caut_bin(1,i);
        if(d[i]<d[j]+1 && v[j]<v[i])
        {
            d[i]=d[j]+1;
            mx=max(mx,d[i]);
            pmax=i;
        }
    }
    g<<mx<<'\n';
    ans[++k]=v[pmax];
    p=mx;
    j=pmax;
    for(i=n; i>=1; i--)
        if(d[i]==p-1 && v[i]<v[j])
        {
            p--;
            j=i;
            ans[++k]=v[i];
        }
    for(i=k;i>0;i--)
        g<<ans[i]<<' ';
}