Cod sursa(job #2673891)

Utilizator Iulia14iulia slanina Iulia14 Data 18 noiembrie 2020 09:16:18
Problema Subsir crescator maximal Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <fstream>

using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int a[100005];
int v[100005];
int poz[100005];
int ans[100005];
int main()
{
    int n, i;
    cin >> n;
    for (i = 1; i <= n; i++)
        cin >> a[i];
    int l = 1;
    v[l] = a[1];
    for (i = 2; i <= n; i++)
    {
        if (a[i] > v[l])
        {
            v[++l] = a[i];
            poz[i] = l;
            continue;
        }
        int x, st = 1, dr = l;
        while (st <= dr)
        {
            int mid = (st + dr) / 2;
            if (v[mid] < a[i])
                st = mid + 1;
            else
            {
                x = mid;
                dr = mid - 1;
            }
        }
        v[x] = a[i];
        poz[i] = x;
    }
    cout << l << '\n';
    int k = 0;
    i = n;
    while (i && l)
    {
        if (poz[i] == l)
        {
            ans[++k] = i;
            l--;
        }
        i--;
    }
    while (k)
        cout << a[ans[k--]] << " ";
    return 0;
}