Cod sursa(job #2705527)

Utilizator zerolightningIon Bobescu zerolightning Data 12 februarie 2021 18:50:31
Problema Subsir crescator maximal Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <iostream>
#include <fstream>
#include <vector>


using namespace std;

int N;

int insert(vector<int>& det,int nr)
{
	//cout << nr << " ? " << det.back()<<endl;
	if (nr > det.back())
	{
		det.push_back(nr);
		return det.size() - 1;
	}
	else
	{
		for (int i = det.size() ; i > 0; --i)
		{
			if (det[i-1] < nr)
			{
				det[i] = nr;
				return i;
			}
		}
		det[0] = nr;
		return 0;
	}
}

int main()
{
	ifstream f("scmax.in");
	ofstream g("scmax.out");
	// Program
	f >> N;
	vector<int> v(N);
	vector<int> determinant;
	vector<int> position(N);
	int nr;
	f >> nr;
	v[0] = nr;
	determinant.push_back(nr);
	position[0] = 0;
	for (int i = 1; i < N; i++)
	{
		f >> nr;
		v[i] = nr;
		position[i] = insert(determinant, nr);
	}
	int k = determinant.size();
	g << k << endl;
	k--;
	int index_end = -1;
	for (int i = 0; i < N; i++)
	{
		if (position[i] == k)
		{
			index_end = i;
			break;
		}
	}
	for (int i = index_end; i >= 0; --i)
	{
		if (position[i] == k)
		{
			determinant[k] = v[i];
			k--;
		}
	}
	for (auto it = determinant.begin(); it != determinant.end(); ++it)
	{
		g << *it << " ";
	}

	// Exit
	f.close();
	g.close();
	return 0;
}