Cod sursa(job #2392616)

Utilizator alextodoranTodoran Alexandru Raul alextodoran Data 30 martie 2019 11:09:26
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

#define N_MAX 100002

using namespace std;

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

const int INF = 2e9+1;

int n;

int v[N_MAX];

int dp[N_MAX], ind[N_MAX], pre[N_MAX];

void print (int pos)
{
    if(pos == 0)
        return;
    print(pre[pos]);
    fout << v[pos] << " ";
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; i++)
    {
        fin >> v[i];
        dp[i] = INF;
    }
    int mx = 0, mxp = 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])
        {
            if(mx < l)
            {
                mx = l;
                mxp = i;
            }
            dp[l] = v[i];
            ind[l] = i;
            pre[i] = ind[l - 1];
        }
    }
    fout << mx << "\n";
    print(mxp);
    fout << "\n";
    return 0;
}