Pagini recente » Cod sursa (job #1910756) | Cod sursa (job #2349046) | Cod sursa (job #343152) | Cod sursa (job #3139585) | Cod sursa (job #1413373)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N, M;
int V[100005], sol[100005], TT[100005];
int cb(int x)
{
int lt = 0, rt = M + 1;
while (rt - lt > 1)
{
int mid = (lt + rt) / 2;
if (V[sol[mid]] <= x)
lt = mid;
else
rt = mid;
}
//if (V[sol[lt]] == x)
// return -1;
//else if (lt == 0)
// return 1;
//else if (lt == M)
// return M + 1;
return lt;
}
void afis(int pos)
{
if (pos == 0)
return;
afis(TT[pos]);
fout << V[pos] << ' ';
}
int main()
{
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> V[i];
for (int i = 1; i <= N; ++i)
{
int pos = cb(V[i]);
if (pos == -1)
continue;
++pos;
sol[pos] = i;
TT[i] = sol[pos - 1];
M = max(M, pos);
}
fout << M << '\n';
afis(sol[M]);
fin.close();
fout.close();
return 0;
}