Pagini recente » Cod sursa (job #350008) | Cod sursa (job #776924) | Cod sursa (job #2203668) | Cod sursa (job #908876) | Cod sursa (job #2035968)
#include <fstream>
#include <climits>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
#define MAX 100000
int v[MAX + 1], S[MAX + 1], pr[MAX + 1];
int N;
int BinarySearch(int low, int high, int x)
{
while (low < high)
{
int mid = (low + high) / 2;
if (v[S[mid]] < x && v[S[mid + 1]] >= x) return mid;
else if(x < v[S[mid]])
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return low;
}
int main()
{
in >> N;
for (int i = 1; i <= N; i++)
{
in >> v[i];
}
int len = 0;
S[0] = 0;
v[0] = -INT_MAX;
for (int i = 1; i <= N; i++)
{
int poz = BinarySearch(0, len, v[i]);
pr[i] = S[poz];
S[poz + 1] = i;
if (poz + 1 > len) len = poz + 1;
}
out << len << '\n';
int i = S[len];
len = 0;
for (; i > 0; i = pr[i])
{
S[len++] = v[i];
}
for (i = len - 1; i >= 0; i--)
{
out << S[i] << ' ';
}
}