Cod sursa(job #1680395)

Utilizator Player1Player 1 Player1 Data 8 aprilie 2016 18:43:11
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 2.04 kb
#include <stdio.h>
#include <vector>
#define NMIN 2000000003

using namespace std;

int main(){
	freopen("scmax.in", "r", stdin);
	freopen("scmax.out","w", stdout);
	long n, i, j, maxElem, minElem, biggestMin, indexBig, x, vecMax, indexVec;
	scanf("%ld ", &n);
	vector<vector<long> > solutions;
	scanf("%ld ", &x);
	vector<long> temp(1,x);
	solutions.push_back(temp);
	vecMax = 0;
	indexVec = 0;
	for(i = 1; i < n; i++){
		scanf("%ld ", &x);
		maxElem = 0;
		minElem = NMIN;
		biggestMin = 0;
		vecMax = 0;
		indexVec = 0;
		for(j = 0; j < solutions.size(); j++){
			if(solutions[j][solutions[j].size() - 1] > maxElem)
				maxElem = solutions[j][solutions[j].size() - 1];
			if(solutions[j][solutions[j].size() - 1] < minElem)
				minElem = solutions[j][solutions[j].size() - 1];
			if((solutions[j][solutions[j].size() - 1] > biggestMin) && (solutions[j][solutions[j].size() - 1] < x)){
				biggestMin = solutions[j][solutions[j].size() - 1];
				indexBig = j;
			}
			if(solutions[j].size() > vecMax){
				vecMax = solutions[j].size();
				indexVec = j;
			}
		}
		if(x > maxElem){
			vector<long> tm(solutions[indexVec]);
			tm.push_back(x);
			solutions.push_back(tm);
			if(tm.size() > vecMax){
				vecMax = tm.size();
				indexVec = solutions.size() - 1;
			}
		} else if(x < minElem){
			temp[0] = x;
			solutions.push_back(temp);
			for(j = 0; j < solutions.size() - 1; j++)
				if(solutions[j].size() == 1){
					solutions.erase(solutions.begin()+j);
					break;
				}
		} else if((x > minElem) && (x < maxElem) && (biggestMin != 0)){
			vector<long> tm(solutions[indexBig]);
			tm.push_back(x);
			solutions.push_back(tm);
			if(tm.size() > vecMax){
				vecMax = tm.size();
				indexVec = solutions.size() - 1;
			}
			for(j = 0; j < solutions.size() - 1; j++)
				if(solutions[j].size() == tm.size()){
					solutions.erase(solutions.begin()+j);
					break;
				}
		}
	}
	printf("%ld\n", vecMax);
	for(i = 0; i < solutions[indexVec].size(); i++)
		printf("%ld ", solutions[indexVec][i]);
	
	return 0;
}