Pagini recente » Cod sursa (job #1082344) | Cod sursa (job #880406) | Cod sursa (job #181045) | Cod sursa (job #667192) | Cod sursa (job #2570846)
#include <iostream>
#include <fstream>
#include <climits>
#include <vector>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n, i, j = 0, k = 0, sol, a[100010], p[100010], q[100010], s[100010];
int Caut(int st, int dr, int x)
{
int r = INT_MAX;
while (st <= dr)
{
int m = (st + dr) / 2;
if (q[m] < x)
st = m + 1;
else
{
dr = m - 1;
if (r == INT_MAX)
r = m;
else
{
if (q[m] < q[r])
r = m;
}
}
}
return r;
}
int main()
{
f >> n;
for (i = 1; i <= n; ++i)
{
f >> a[i];
if (j == 0)
{
q[++j] = a[i];
p[++k] = j;
}
else
{
sol = Caut(1, j, a[i]);
if (sol != INT_MAX)
{
q[sol] = a[i];
p[++k] = sol;
}
else
{
q[++j] = a[i];
p[++k] = j;
}
}
}
g << j << '\n';
for (i = j; i >= 1; --i)
{
while (i != p[k])
--k;
s[i] = a[k];
}
for (i = 1; i <= j; ++i)
g << s[i] << " ";
return 0;
}