Cod sursa(job #3221629)

Utilizator swebypepe lepe sweby Data 7 aprilie 2024 16:30:23
Problema Subsir crescator maximal Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>

using namespace std;

#define NMAX 100000

ifstream cin("scmax.in");
ofstream cout("scmax.out");

int v[NMAX + 1];
int dp[NMAX + 1];
int prv[NMAX + 1];
int sol[NMAX + 1];

int main(){
  int poz ,n,i,cnt = 0 ,st,j,cntmax = 0,k = 0;
  cin >> n;
  for(i = 1; i <= n; i++){
    cin >> v[i];
  }
  for(i  = 1; i <= n; i++){
    dp[i] = 1;
    prv[i] = -1;
    for(j = 1; j < i ; j++){
       if(v[j] < v[i]){
        if(dp[i] < dp[j] + 1){
          dp[i] = dp[j] + 1;
          prv[i] = j;
        }
       }
    }
   if(dp[i] > cntmax){
    cntmax = dp[i];
    st = i;
   }
  }
  poz = st;
  while(poz  != -1){
    k++;
    sol[k] = v[poz];
    poz = prv[poz];
  }
  cout << cntmax << '\n';
  for(i = k ; i >= 1; i --)
    cout << sol[i] << " ";
  return 0;
}