Pagini recente » Cod sursa (job #1241291) | Cod sursa (job #1111720) | Cod sursa (job #139429) | Cod sursa (job #1261348) | Cod sursa (job #1251674)
#include <fstream>
#include <vector>
int main()
{
std::ifstream fin("scmax.in");
std::ofstream fout("scmax.out");
int N;
fin >> N;
std::vector<int> v(N);
for (int i = 0; i < N; ++i)
fin >> v[i];
fin.close();
std::vector<int> P(N);
std::vector<int> M(N+1);
int L = 0;
for (int i = 0; i < N; ++i) {
int lo = 1;
int hi = L;
while (lo <= hi) {
int mid = lo + (hi - lo)/2;
if (v[M[mid]] < v[i])
lo = mid + 1;
else
hi = mid - 1;
}
P[i] = M[lo - 1];
M[lo] = i;
if (lo > L)
L = lo;
}
std::vector<int> seq(L);
int k = M[L];
for (int i = L - 1; i >= 0; --i) {
seq[i] = v[k];
k = P[k];
}
fout << L << "\n";
for (auto &i : seq)
fout << i << " ";
fout.close();
return 0;
}