Cod sursa(job #2647860)

Utilizator DinuRares201Dinu Rares Mihai DinuRares201 Data 6 septembrie 2020 19:39:31
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, x, k, seqSize, v[100001], seq[100001], index[100001], ans[100001];

int valueSearch(int l, int r, int x)
{
    int pos = -1;
    while(l <= r)
    {
        int m = (l+r)/2;
        if(seq[m] < x)
            l = m+1;
        else
        {
            pos = m;
            r = m-1;
        }
    }
    return pos;
}

int main()
{
    fin>>n;
    for(int i = 0; i < n; i++)
        fin>>v[i];
    seq[0] = v[0];
    index[0] = 0;

    for(int i = 1; i < n; i++)
    {
        if(v[i] > seq[seqSize])
        {
            seq[++seqSize] = v[i];
            index[i] = seqSize;
        }
        else
        {
            int pos = valueSearch(0, seqSize, v[i]);
            seq[pos] = v[i];
            index[i] = pos;
        }
    }
    fout<<seqSize+1<<'\n';
    for(int i = n-1; i >= 0 && seqSize > -1; i--)
        if(index[i] == seqSize)
        {
            ans[k++] = v[i];
            seqSize--;
        }
    for(int i = k-1; i >= 0; i--)
        fout<<ans[i]<<" ";
    return 0;
}