Pagini recente » Cod sursa (job #136690) | Cod sursa (job #593346) | Cod sursa (job #382950) | Cod sursa (job #1783964) | Cod sursa (job #1998159)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#include <binders.h>
#define MAXN 100005
using namespace std;
ifstream in("scmax.in");
ofstream out ("scmax.out");
int N,i,j;
long int v[MAXN],D[MAXN],ans,counter = 1;
void cit(){
in>>N;
for(i = 0 ; i < N; i++ ){
in>>v[i];
}
}
void text(){
cout<<endl<<endl;
for(int x = 0 ; x < N; x ++){
cout<<D[x]<<" ";
}
}
void quickSort(long int arr[], int left, int right) {
int i = left, j = right;
int tmp;
int pivot = arr[(left + right) / 2];
/* partition */
while (i <= j) {
while (arr[i] < pivot)
i++;
while (arr[j] > pivot)
j--;
if (i <= j) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
i++;
j--;
}
};
/* recursion */
if (left < j)
quickSort(arr, left, j);
if (i < right)
quickSort(arr, i, right);
}
void rezolvare(){
// D - vector in care punem lungimea celei mai lungi subsecevente pana la i
for(i = 0 ; i < N; i ++){
D[i] = 1; //un singur element se considera ca o subsecventa
}
for(i = 1; i < N; i ++){
for(j = 0 ; j < i; j ++){
if(v[i] > v[j] && D[i] < D[j] + 1/*minim*/){
D[i] = D[j] + 1;
}
}
}
quickSort(D,0,N-1);
ans = D[N-1];
out<<D[N-1]<<"\n";
for(i = 1 ; i < N; i ++ ){
if(D[i] == counter ){
out<<v[i]<<" ";
counter ++;
}
}
}
int main()
{
cit();
rezolvare();
return 0;
}