Cod sursa(job #1619220)

Utilizator laurentiu.piciuPiciu Laurentiu laurentiu.piciu Data 28 februarie 2016 13:54:26
Problema Subsir crescator maximal Scor 70
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>

#define NMAX 100005

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

int path[NMAX];
long long arr[NMAX];
int N, end;


void afisare(int end_index) {
	if (path[end_index] != -1) {
		afisare(path[end_index]);
	}
	fout << arr[end_index] << " "; 
}

int maximum_length() {
   	int *L, i, j, max = 0;
   	L = new int[N];

   	for (i = 0; i < N; i++) {
   	  	L[i] = 1;
   	  	path[i] = -1;
  	}
    
   	/* Compute optimized L values in bottom up manner */
   	for (i = 1; i < N; i++) {
      	for (j = 0; j < i; j++) { 
        	if (arr[i] > arr[j] && L[i] < L[j] + 1) {
     	       	L[i] = L[j] + 1;
     	       	path[i] = j;
	      	}
    	}
    }
    
   	for (i = 0; i < N; i++) {
      	if (max < L[i]) {
        	max = L[i];
        	end = i;
        }
    }
 
   	delete[] L; 
   	return max;
}
 
int main() {
	fin >> N;
	for (int i = 0; i < N; i++) {
		fin >> arr[i];
	}

	fout << maximum_length() << '\n';
	afisare(end);

	return 0;
}