Pagini recente » Cod sursa (job #481164) | Cod sursa (job #2057698) | Cod sursa (job #2018706) | Cod sursa (job #3182574) | Cod sursa (job #2415898)
#include <bits/stdc++.h>
#define INF 2000000001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, maxim = 0, k;
vector <int> v, p, l;
void Read()
{
fin >> n;
v.resize(n + 1);
p.resize(n + 1);
l.resize(n + 1);
for (int i = 1; i <= n; ++i)
fin >> v[i], l[i] = INF;
}
int cbin(int st, int dr, int x)
{
int mid, poz;
while (st <= dr)
{
mid = (st + dr) / 2;
if (l[mid] >= x) poz = mid, dr = mid - 1;
else st = mid + 1;
}
return poz;
}
void Solve()
{
for (int i = 1; i <= n; ++i)
{
k = cbin(1, maxim + 1, v[i]);
if (l[k] == INF)
++maxim;
l[k] = v[i];
p[i] = k;
}
fout << maxim << "\n";
}
void Reconst(int poz, int val)
{
if (poz == 0 || val == 0) return;
if (p[poz] == val)
{
Reconst(poz - 1, val - 1);
fout << v[poz] << " ";
}
else
{
Reconst(poz - 1, val);
}
}
int main()
{
Read();
Solve();
Reconst(n, maxim);
fin.close();
fout.close();
return 0;
}