Pagini recente » Cod sursa (job #634790) | Cod sursa (job #885475) | Cod sursa (job #2577339) | Cod sursa (job #867610) | Cod sursa (job #3174473)
#include <fstream>
#include <stack>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int l[100001], poz[100001], x[100001];
int n, m;
void print(int l, int i)
{
if (i == 0)
return;
else
{
if (poz[i] == l)
{
print(l - 1, i - 1);
cout << x[i] << ' ';
}
else
print(l, i - 1);
}
}
int main()
{
cin >> n;
int len = 1;
for (int i = 1; i <= n; i++)
cin >> x[i];
poz[1] = 1;
l[len] = x[1];
for (int i = 2; i <= n; i++)
{
if (x[i] > l[len])
{
poz[i] = len + 1;
l[++len] = x[i];
}
else
{
int st = 1, dr = len;
int ow;
while (st <= dr)
{
int mid = (st + dr) / 2;
if (l[mid] >= x[i])
dr = mid - 1;
else
st = mid + 1;
}
poz[i] = st;
l[st] = x[i];
}
}
cout << len << '\n';
print(len, n);
return 0;
}