Pagini recente » Cod sursa (job #1267835) | Cod sursa (job #728930) | Cod sursa (job #914992) | Cod sursa (job #519417) | Cod sursa (job #1023539)
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX 100001
int N, X[MAX], Bst[MAX], C[MAX], K, Y;
int FindPosition(int Val, int Lo, int Hi) {
int Mid;
while (Hi - Lo > 1) {
Mid = (Lo + Hi) / 2;
if(C[Mid] < Val) {
Lo = Mid;
} else {
Hi = Mid;
}
}
if (C[Lo] >= Val)
return Lo; else
return Hi;
}
void PrintSol(int N, int K) {
if (K > 0)
for (int i = N - 1; i >= 0; i--) {
if (Bst[i] == K) {
PrintSol(i, K - 1);
printf("%d ", X[i]);
return;
}
}
}
int main(){
freopen("scmax.in","r",stdin);
freopen("scmax.out","w",stdout);
scanf("%d", &N);
for (int i = 0; i < N; i++) {
scanf("%d", &X[i]);
Y = FindPosition(X[i], 1, K + 1);
Bst[i] = Y;
C[Y] = X[i];
if (Y > K) K = Y;
}
printf("%d\n", K);
PrintSol(N, K);
return 0;
}