Cod sursa(job #2169537)

Utilizator cristii2000cristiiPanaite Cristian cristii2000cristii Data 14 martie 2018 16:01:52
Problema Subsir crescator maximal Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

ifstream in("scmax.in");

const int MAX = 100005;

int n;

int sir[MAX];

int s1[MAX];
int counter = 0;
vector <int> sol;

int s2[MAX];
int counterS2 = 0;;

int searchBin(int st, int dr, int nr)
{
	if(st == dr)
	{
		if(s1[st] >= nr)
			return st;
		return -1;
	}

	int mij = (st + dr) / 2;
	if(s1[mij] < nr)
		return searchBin(mij + 1, dr, nr);
	else
		return searchBin(st, mij, nr);
}

void constructS1(int x)
{
	int poz = searchBin(1, counter, x);
	if(poz == -1)
	{
		s1[++counter] = x;
		s2[++counterS2] = counter;
	}
	else
	{
		s1[poz] = x;
		s2[++counterS2] = poz;
	}
}

void citire()
{
	in >> n;
	in >> sir[1];
	s1[++counter] = sir[1];
	s2[++counterS2] = 1;

	for(int i = 2; i <= n; i++)
	{
		in >> sir[i];
        constructS1(sir[i]);
	}
	for(int i = n; i > 0; i--)
	{
		if(s2[i] == counter)
		{
			sol.push_back(sir[i]);
			counter--;
		}
	}
	for(int i = sol.size() - 1; i>= 0; i--)
	{
		cout << sol[i] << " ";
	}
}

int main()
{
	citire();
    return 0;
}