Cod sursa(job #2771454)

Utilizator Cosma05Cosma Tudor Cosma05 Data 27 august 2021 13:12:04
Problema Subsir crescator maximal Scor 85
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

long long v[100005] , x[100005] , ans[100005] , P[100005];
int Mac;

int main()
{
    int n;
    fin >> n;
    for(int i = 1 ; i <= n ; i++)
        fin >> v[i];
    int k = 1;
    x[k] = v[1];
    for(int i = 2 ; i <= n ; i++)
        if(v[i] > x[k])
            x[++k] = v[i] , P[i] = k;
        else
        {
            int st = 1 , dr = k , p = k + 1;
            while(st <= dr)
            {
                int m = (st + dr) / 2;
                if(x[m] > v[i]) p = m , dr = m - 1;
                else st = m + 1;
            }
            x[p] = v[i];
            P[i] = p;
        }
    int j = n;
    for(int i = k ; i >= 1; i--)
    {
        while(P[j] != i)
            j--;
        ans[i] = j;
    }
    fout << k << '\n';
    for(int i = 1 ; i <= k ; i++)
        fout << v[ans[i]] << " ";
    return 0;
}