Pagini recente » Cod sursa (job #672147) | Cod sursa (job #144737) | Cod sursa (job #2663067) | Cod sursa (job #2062143) | Cod sursa (job #3215517)
#include <fstream>
#define MAX 100000
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int ans[MAX + 10], pos[MAX + 10], v[MAX + 10], actlAns[MAX + 10];
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> v[i];
int length = 1;
ans[1] = v[1];
pos[1] = 1;
for (int i = 2; i <= n; i++)
{
int left = 1, right = length, position = -1;
while (left <= right)
{
int mid = (left + right) / 2;
if (v[i] > ans[mid])
left = mid + 1;
else
{
right = mid - 1;
position = mid;
}
}
if (position == -1)
{
length++;
ans[length] = v[i];
pos[i] = length;
}
else
{
ans[position] = v[i];
pos[i] = position;
}
}
cout << length << '\n';
int cnt = 0;
for (int i = n; i >= 1; i--)
if (pos[i] == length)
{
cnt++;
actlAns[cnt] = v[i];
length--;
}
for (int i = cnt; i >= 1; i--)
cout << actlAns[i] << ' ';
return 0;
}