Pagini recente » Cod sursa (job #3339387) | Cod sursa (job #595214) | Cod sursa (job #1893360) | Cod sursa (job #681150) | Cod sursa (job #3357189)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int a[100005];
int d[100005];
int idx[100005];
int parent[100005];
int main()
{
int N;
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> a[i];
int len = 0;
for (int i = 1; i <= N; ++i)
{
int st = 0, dr = len, pos = 0;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (d[mij] < a[i])
{
pos = mij;
st = mij + 1;
}
else
{
dr = mij - 1;
}
}
int newLen = pos + 1;
d[newLen] = a[i];
idx[newLen] = i;
if (pos > 0)
parent[i] = idx[pos];
else
parent[i] = 0;
if (newLen > len)
len = newLen;
}
fout << len << "\n";
vector<int> sol;
int p = idx[len];
while (p != 0)
{
sol.push_back(a[p]);
p = parent[p];
}
reverse(sol.begin(), sol.end());
for (auto x : sol)
fout << x << " ";
return 0;
}