Pagini recente » Cod sursa (job #1664019) | Cod sursa (job #348734) | Cod sursa (job #635614) | Cod sursa (job #2133948) | Cod sursa (job #2673892)
#include <fstream>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int a[100005];
int v[100005];
int poz[100005];
int ans[100005];
int main()
{
int n, i;
cin >> n;
for (i = 1; i <= n; i++)
cin >> a[i];
int l = 1;
v[l] = a[1];
poz[1] = 1;
for (i = 2; i <= n; i++)
{
if (a[i] > v[l])
{
v[++l] = a[i];
poz[i] = l;
continue;
}
int x, st = 1, dr = l;
while (st <= dr)
{
int mid = (st + dr) / 2;
if (v[mid] < a[i])
st = mid + 1;
else
{
x = mid;
dr = mid - 1;
}
}
v[x] = a[i];
poz[i] = x;
}
cout << l << '\n';
int k = 0;
i = n;
while (i && l)
{
if (poz[i] == l)
{
ans[++k] = i;
l--;
}
i--;
}
while (k)
cout << a[ans[k--]] << " ";
return 0;
}