Cod sursa(job #2323887)

Utilizator diaconudanielaDiaconu Daniela diaconudaniela Data 19 ianuarie 2019 22:23:29
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <ctime>
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int   v[100001];
int aux[100001];
int poz[100001];
int solutie[100001];


int main()
{

    int n, i, k, st, dr, mij;

    f>>n;
    k=0;
    for(i=1; i<=n; i++)
    {
        f>>v[i];
        st=0;
        dr=k;
        while(st<dr)
        {
            mij=(st+dr)/2;
            if(aux[mij]==v[i])
                st=dr=mij;
            else if(aux[mij]<v[i])
                st=mij+1;
            else
                dr=mij;
        }
        mij=(st+dr)/2;
        if(st==k && v[i]>=aux[k])
            k++;
        aux[mij]=v[i];
        poz[i]=mij;
    }

    cout<<k<<endl;
    dr=k-1;
    for(i=n; i>0; i--)
    {
        if(poz[i]==dr)
        {
            solutie[dr]=i;
            dr--;
        }
    }
    for(i=0; i<k; i++)
        cout<<v[solutie[i]]<<" ";

    return 0;
}