Cod sursa(job #3215516)

Utilizator ana_valeriaAna Valeria Duguleanu ana_valeria Data 15 martie 2024 09:02:24
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <fstream>
#define MAX 100
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int ans[MAX + 10], pos[MAX + 10], v[MAX + 10], actlAns[MAX + 10];
int main()
{
    int n;
    cin >> n;
    for (int i = 1; i <= n; i++)
        cin >> v[i];
    int length = 1;
    ans[1] = v[1];
    pos[1] = 1;
    for (int i = 2; i <= n; i++)
    {
        int left = 1, right = length, position = -1;
        while (left <= right)
        {
            int mid = (left + right) / 2;
            if (v[i] > ans[mid])
                left = mid + 1;
            else
            {
                right = mid - 1;
                position = mid;
            }
        }
        if (position == -1)
        {
            length++;
            ans[length] = v[i];
            pos[i] = length;
        }
        else
        {
            ans[position] = v[i];
            pos[i] = position;
        }
    }
    cout << length << '\n';
    int cnt = 0;
    for (int i = n; i >= 1; i--)
        if (pos[i] == length)
        {
            cnt++;
            actlAns[cnt] = v[i];
            length--;
        }
    for (int i = cnt; i >= 1; i--)
        cout << actlAns[i] << ' ';
    return 0;
}