Pagini recente » Cod sursa (job #1977366) | Cod sursa (job #877495) | Cod sursa (job #2935819) | Cod sursa (job #2294390) | Cod sursa (job #1475074)
#include <cstdio>
#include <algorithm>
#define DIM 100010
#define INF ((1LL<<31)-1);
using namespace std;
int V[DIM], D[DIM], T[DIM];
int N, M;
void DFS(int pos){
if(T[pos] != 0)
DFS(T[pos]);
printf("%d ", V[pos]);
return;
}
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;
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);
DFS(D[M]);
fclose(stdin );
fclose(stdout);
return 0;
}