Pagini recente » Cod sursa (job #1444495) | Cod sursa (job #1082564) | Profil IoanHerbil | Cod sursa (job #350076) | Cod sursa (job #1475157)
#include <cstdio>
#include <algorithm>
#define DIM 100010
#define INF ((1LL<<31)-1);
using namespace std;
int V[DIM], D[DIM], T[DIM], L[DIM];
int N, M, i, K;
int main(){
freopen("scmax.in" ,"r", stdin );
freopen("scmax.out","w", stdout);
scanf("%d", &N);
for(int i = 1; i <= N; i ++)
scanf("%d", &V[i]);
D[1] = 1; M = 1;
for(int i = 2; i <= N; i ++){
if(V[i] > V[D[M]]){
D[++M] = i;
T[i] = D[M-1];
}
else{
int st = 1, dr = M;
while(st <= dr){
int mid = st + (dr - st) / 2;
if(V[D[mid]] >= V[i])
dr = mid - 1;
else
st = mid + 1;
}
if(V[D[st-1]] <= V[i]){
D[st] = i;
T[i] = D[st-1];
}
}
}
printf("%d\n", M);
i = D[M];
while(i != 0){
L[++K] = V[i];
i = T[i];
}
for(int i = K; i >= 1; i --)
printf("%d ", L[i]);
fclose(stdin );
fclose(stdout);
return 0;
}