Cod sursa(job #1998580)

Utilizator ARobertAntohi Robert ARobert Data 8 iulie 2017 14:17:16
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <iostream>
#include <cmath>

using namespace std;

ifstream fin("scmax.in");
ofstream fout("scmax.out");

int v[100001], lg[100001], prev[100001], sir[100001], i, n, stg, dr, mid;

int main()
{
    fin>>n;
    for (i=1;i<=n;i++)
        fin>>v[i];
    lg[0]=0;
    for (i=1;i<=n;i++)
    {
        stg=1;
        dr=lg[0];
        while (stg<=dr)
        {
            mid=ceil(stg+(dr-stg)/2);
            if (v[lg[mid]]<v[i])
                stg=mid+1;
            else dr=mid-1;
        }
        if (stg>lg[0])
            lg[0]++;
        lg[stg]=i;
        prev[i]=lg[stg-1];
    }
    fout<<lg[0]<<endl;
    n=lg[lg[0]];
    for (i=1;i<=lg[0];i++)
        {
            sir[i]=v[n];
            n=prev[n];
        }
    for (i=lg[0];i>=1;i--)
        fout<<sir[i]<<" ";

}