Cod sursa(job #3253123)

Utilizator divadddDavid Curca divaddd Data 1 noiembrie 2024 16:00:20
Problema Subsir crescator maximal Scor 65
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5+2;
int n,a[NMAX],k,dp[NMAX];
// dp[i] = cea mai mica valoare care poate sta pe pozitia i in scmax

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

int find_pos(int val){
  int st = 1, dr = k, ans = k+1;
  while(st <= dr){
    int mid = (st+dr)/2;
    if(dp[mid] >= val){
      ans = mid;
      dr = mid-1;
    }else{
      st = mid+1;
    }
  }
  return ans;
}

int main() {
  fin >> n;
  for(int i = 1; i <= n; i++){
    fin >> a[i];
  }
  for(int i = 1; i <= n; i++){
    int pos = find_pos(a[i]);
    dp[pos] = a[i];
    k = max(k, pos);
  }
  fout << k << "\n";
  for(int i = 1; i <= k; i++){
    fout << dp[i] << " ";
  }
  return 0;
}