Cod sursa(job #1475092)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 23 august 2015 16:29:34
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.81 kb
#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; 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);

	DFS(D[M]);

	fclose(stdin );
	fclose(stdout);

	return 0;
}