Cod sursa(job #1033179)

Utilizator Viva12Ferentz Sergiu Viva12 Data 16 noiembrie 2013 15:54:08
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <iostream>
#include <cstdio>

using namespace std;

int a [100000];

int n;
void scan(){

    cin >> n;
    for(int i =0 ; i < n; i++)
      cin >> a[i];
}

int sol [100000];
void debug(){

  for(int i = 0; i < n ; i++)
  cout << sol[i] << " ";

  cout << endl;
}
int maxV = -1;
int pre[100000];
int bestP;
int bestV;
void dp(){

   for(int i = 0 ; i < n ; i++){

    sol[i] = 1;
    pre[i] = -1;
    for(int j = 0; j < i; j++){
      if(a[i] > a[j]){
        {
            int val = max(sol[i],sol[j]+1);
            if (val != sol[i])
            {
                pre[i] = j;
            }
            sol[i] = max(sol[i],sol[j]+1);

            if(bestV < sol[i])
            {
                bestV = sol[i];
                bestP = i;
            }
        }

	}

      }
   }
cout << bestV << endl;
}

void print(int val){


    if(pre[val] == -1){
        cout << a[val] << " ";
        return;
    }

    print(pre[val]);
    cout << a[val] << " ";
}

int main(){

  freopen("scmax.in","r",stdin);
  freopen("scmax.out","w",stdout);
  scan();
  dp();
  print(bestP);
}