Pagini recente » Rating vlad mosessohn (vladi1999) | Cod sursa (job #2747025) | Cod sursa (job #802052) | Cod sursa (job #1150470) | Cod sursa (job #457926)
Cod sursa(job #457926)
#include <stdio.h>
#include <stdlib.h>
int X[100001];
int n;
int M[100001];
int L;
int P[100001];
int b_search(int val) {
/* if (L==0) return 0;
int s = 1, e = L;
while (s<e) {
int m = (s + e) / 2;
int valm = X[M[m]];
if (valm >= val)
e = m-1;
else
s = m+1;
}
while (s!=0 && X[M[s]] > val) s--;
while (s == 0 || (s <= L && X[M[s]] < val)) s++;
s--;
if (s<=0) return 0;
return s;*/
int i;
for (i=L;i>=1;i--) {
if (X[M[i]]<val) return i;
}
return 0;
}
int main() {
int i, j;
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++) {
int j = b_search(X[i]);
P[i] = j;
if (L==j || X[M[j+1]]>X[i]) {
M[j+1] = i;
if (j+1>L) L = j+1;
}
}
i = M[L]; j = 0;
while(1) {
M[j] = X[i];
if (i==0) break;
j++;
i = P[i];
}
printf("%d\n", L);
for (i=L-1;i>=0;i--) printf("%d ", M[i]);
printf("\n");
return 0;
}