Pagini recente » Cod sursa (job #834910) | Cod sursa (job #2514756) | Cod sursa (job #1491423) | Cod sursa (job #2657058) | Cod sursa (job #2169537)
#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;
}