Pagini recente » Cod sursa (job #2090412) | Cod sursa (job #2804809) | Cod sursa (job #2978825) | Cod sursa (job #2569871) | Cod sursa (job #775026)
Cod sursa(job #775026)
#include <fstream>
#include <vector>
using namespace std;
int N, v[100005], L = 0;
int M[100005];
int P[100005];
vector <int> rasp;
void Citire () {
ifstream fin ("scmax.in");
fin >> N;
for (int i = 1; i <= N; i++)
fin >> v[i];
fin.close ();
}
int B_Search (int dog) {
int i = 0, step = 1 << 17;
for (; step; step >>= 1)
if (i + step <= L && v[M[i + step]] < v[dog]) i += step;
return i;
}
void Business () {
int j;
for (int i = 1; i <= N; i++)
{
j = B_Search (i);
P[i] = M[j];
if (j == L || v[i] < v[M[j + 1]])
{
M[j + 1] = i;
L = max (L, j + 1);
}
}
}
void Scriere () {
ofstream fout ("scmax.out");
fout << L << "\n";
int a = M[L];
while (a > 0)
{
rasp.push_back (v[a]);
a = P[a];
}
while (!rasp.empty ())
{
fout << rasp.back () << " ";
rasp.pop_back ();
}
fout.close ();
}
int main () {
Citire ();
Business ();
Scriere ();
return 0;
}