Pagini recente » Cod sursa (job #3222558) | Cod sursa (job #406111) | Cod sursa (job #2894286) | Cod sursa (job #236452) | Cod sursa (job #1413401)
#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 lt - 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]);
++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;
}