Cod sursa(job #1680119)

Utilizator Player1Player 1 Player1 Data 8 aprilie 2016 15:29:16
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.53 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, indexMax, indexMin, biggestMin, indexBig;
	vector<long> nums;
	scanf("%d ", &n);
	for(i = 0; i < n; i++)
		scanf("%ld ", &nums[i]);
	vector<vector<long>> solutions;
	vector<long> temp(1,nums[0]);
	solutions.push_back(temp);
	for(i = 1; i < nums.size(); i++){
		maxElem = 0;
		minElem = NMIN;
		biggestMin = 0;
		for(j = 0; j < solutions.size(); j++){
			if(solutions[j][solutions[j].size() - 1] > maxElem){
				maxElem = solutions[j][solutions[j].size() - 1];
				indexMax = j;
			}
			if(solutions[j][solutions[j].size() - 1] < minElem){
				minElem = solutions[j][solutions[j].size() - 1];
				indexMin = j;
			}
			if((solutions[j][solutions[j].size() - 1] > biggestMin) && (solutions[j][solutions[j].size() - 1] < nums[i])){
				biggestMin = solutions[j][solutions[j].size() - 1];
				indexBig = j;
			}
		}
		if(nums[i] > maxElem)
			solutions[indexMax].push_back(nums[i]);
		if(nums[i] < minElem){
			temp[0] = nums[i];
			solutions.push_back(temp);
		}
		if((nums[i] > minElem) && (nums[i] < maxElem) && (biggestMin !=0)){
			for(j = 0; j < solutions[indexBig].size(); j++)
				solutions[indexBig+1][j] = solutions[indexBig][j];
			solutions[indexBig+1].push_back(nums[i]);
		}
	}
	for(i = 0; i < solutions[solutions.size() - 1].size(); i++)
		printf("%ld ", solutions[solutions.size() - 1][i]);
	
	return 0;
}