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