Pagini recente » Cod sursa (job #1274997) | Cod sursa (job #2886834) | Cod sursa (job #1800001) | Cod sursa (job #1046867) | Cod sursa (job #2291976)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int sequence[100005];
int n, lmax;
int v[100005];
int parent[100005];
int solutii[100005];
//solutie de bun simt
int caut_bin(int elem)
{
int st = 0, dr = lmax, m;
while (st < dr)
m = (st + dr) >> 1, (v[sequence[m]] < elem) ? st = m + 1 : dr = m;
return st;
}
int main()
{
int last_position = 0;
fin >> n;
int i = 0;
while(fin >> v[i])
{
sequence[i] = 0;
parent[i] = -1;
i++;
}
int pos;
for (i = 1; i < n; i++)
{
if (v[i] < v[sequence[0]])
{
sequence[0] = i;
}
else if (v[i] > v[sequence[lmax]])
{
parent[i] = sequence[lmax];
lmax++;
sequence[lmax] = i;
last_position = i;
}
else
{
pos = caut_bin(v[i]);
parent[i] = sequence[pos - 1];
sequence[pos] = i;
}
}
int copie = lmax;
fout << lmax + 1 << endl;
while (parent[last_position] != -1)
{
solutii[copie] = v[last_position];
last_position = parent[last_position];
copie--;
}
solutii[copie] = v[last_position];
for (i = 0; i <= lmax; i++)
{
fout << solutii[i] << ' ';
}
fout << endl;
return 0;
}