Pagini recente » Cod sursa (job #510464) | Cod sursa (job #2137084) | Cod sursa (job #1242295) | Cod sursa (job #764720) | Cod sursa (job #3215799)
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int n, m, i;
int len, lenfin;
int a[100001];
int sol[100001];
int poz1[100001];
int sol1[100001];
int binarysearch(int x)
{
if (len == 0)
{
len++;
return len;
}
if (sol[1] >= x)
{
return 1;
}
if (sol[len] < x)
{
len++;
return len;
}
int st = 1, dr = len, poz=n+1;
while (st <= dr)
{
int mij = (st + dr) / 2;
if (sol[mij] >= x)
{
poz = mij;
dr = mij - 1;
}
else
st = mij + 1;
}
return poz;
}
int main() {
cin >> n;
int x, j;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
}
for (int i = 1; i <= n; i++)
{
j = binarysearch(a[i]);
sol[j] = a[i];
poz1[i] = j;
}
j = len;
for (int i = n; i >= 1; i--)
{
if (poz1[i] == j)
{
sol1[j] = a[i];
j--;
}
}
cout << len << "\n";
for (int i = 1; i <= len; i++)
{
cout << sol1[i] << " ";
}
return 0;
}