Pagini recente » Cod sursa (job #1903590) | Cod sursa (job #590190) | Cod sursa (job #2197330) | Cod sursa (job #205542) | Cod sursa (job #1189364)
#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include <cstdio>
#include <fstream>
#include <vector>
#include <deque>
#include <set>
#include <map>
#include <list>
#include <string>
#include <iterator>
#include <algorithm>
#include <cmath>
#include <iomanip>
#include <tuple>
using namespace std;
#define NMAX 100001
int n, P[NMAX], M[NMAX], X[NMAX], S[NMAX], L, newL;
int main(){
int i, j, lo, hi, mid, k;
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &n);
for (i = 0; i < n; i++) scanf("%d", &X[i]);
L = 0;
for (i = 0; i < n; i++){
lo = 1; hi = L;
while (lo <= hi){
mid = lo + (hi - lo) / 2;
if (X[M[mid]] < X[i]) lo = mid + 1;
else hi = mid - 1;
}
newL = lo;
P[i] = M[newL - 1];
if (newL > L){
M[newL] = i;
L = newL;
}
else if (X[i] < X[M[newL]]){
M[newL] = i;
}
}
k = M[L];
for (i = L - 1; i >= 0; i--){
S[i] = X[k];
k = P[k];
}
printf("%d\n", L);
for (i = 0; i < L; i++) printf("%d ", S[i]);
return 0;
}