Cod sursa(job #2392585)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 30 martie 2019 10:51:18
Problema Subsir crescator maximal Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>

#define N_MAX 100002

using namespace std;

const int INF = 2e9+1;

int n;

int v[N_MAX];

int dp[N_MAX], index[N_MAX];

int main()
{
    ifstream fin ("scmax.in");
    ofstream fout ("scmax.out");
    fin >> n;
    for(int i = 1; i <= n; i++)
    {
        fin >> v[i];
        dp[i] = INF;
    }
    int mx = 0;
    for(int i = 1; i <= n; i++)
    {
        int l = 0, r = n, mid;
        while(l < r)
        {
            mid = (l + r) / 2;
            if(dp[mid] <= v[i])
                l = mid + 1;
            else
                r = mid;
        }
        if(v[i] < dp[l] && v[i] > dp[l - 1])
        {
            mx = max(mx, l);
            dp[l] = v[i];
            index[l] = i;
        }
    }
    fout << mx << "\n";
    for(int i = 1; i <= mx; i++)
        fout << dp[i] << " ";
    fout << "\n";
    return 0;
}