Cod sursa(job #2715217)

Utilizator danhHarangus Dan danh Data 3 martie 2021 11:45:24
Problema Subsir crescator maximal Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;

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

const int NMAX = 100005;
const int inf = (1<<30) - 1;

int last[NMAX];
int v[NMAX];
int where[NMAX];

vector<int> rez;

int main()
{
    int n, i;
    fin>>n;
    for(i = 1; i <= n; i++)
    {
        fin>>v[i];
        last[i] = inf;
    }


    int ans = 1;
    for(i = 1; i <= n; i++)
    {
        int index = lower_bound(last + 1, last + n + 1, v[i]) - last;
        last[index] = v[i];
        where[i] = index;
        ans = max(index, ans);
    }

    fout<<ans<<'\n';

    for(i = n; i >= 1; i--)
    {
        if(where[i] == ans)
        {
            ans--;
            rez.push_back(v[i]);
        }
    }

    for(i = rez.size() - 1; i >= 0; i--)
    {
        fout<<rez[i]<<' ';
    }


    fin.close();
    fout.close();
    return 0;
}