Cod sursa(job #2592779)

Utilizator sichetpaulSichet Paul sichetpaul Data 2 aprilie 2020 12:57:06
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
#define Nmax 100005
using namespace std;

ifstream f("scmax.in");
ofstream g("scmax.out");

int N, M;
int v[Nmax], dp[Nmax], pos[Nmax], last[Nmax];

void print(int idx) {
    if (last[idx] == 0) g << v[idx] << " ";
    else print(last[idx]), g << v[idx] << " ";
}
int main()
{
    f >> N;
    for (int i = 1; i <= N; ++i)
        f >> v[i];

    for (int i = 1; i <= N; ++i) {
       int le = 1, ri = M, P = M + 1;
       while (le <= ri) {
           int mid = (le + ri) / 2;
           if (v[i] <= v[pos[mid]]) P = mid, ri = mid - 1;
           else le = mid + 1;
       }
          if (P > M) ++M;
          pos[P] = i;
          last[i] = pos[P - 1];
    }

    g << M << '\n';
    print(pos[M]);

    return 0;
}