Pagini recente » Cod sursa (job #1232199) | Cod sursa (job #1159644) | Cod sursa (job #630636) | Cod sursa (job #2721683) | Cod sursa (job #2176286)
#include <fstream>
#define N_MAX 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, arr[N_MAX], best[N_MAX], p[N_MAX], mx, k, L[N_MAX], len;
void tip(int i)
{
if (p[i] > 0)
{
tip(p[i]);
}
fout << arr[i] << " ";
}
int bS(int x)
{
int low, high, mid;
low = 0;
high = len;
mid = low + (low - high) / 2;
while (low <= high)
{
if (arr[L[mid]] < x && arr[L[mid+1]] >= x)
{
return mid;
}
else if (arr[L[mid+1]] < x)
{
low = mid + 1;
mid = low + (low - high) / 2;
}
else
{
high = mid - 1;
mid = low + (low - high) / 2;
}
return len;
}
}
int main()
{
int i, j, pos;
len = 1;
fin >> n;
for (i = 1; i <= n; i++)
{
fin >> arr[i];
}
best[1] = L[1] = 1;
L[0] = 0;
for (i = 2; i <= n; i++)
{
pos = bS(arr[i]);
p[i] = L[pos];
best[i] = pos + 1;
L[pos + 1] = i;
if (len < pos + 1)
{
len = pos + 1;
}
}
mx = 0;
pos = 0;
for (i = 1; i <= n; i++)
{
if (mx < best[i])
{
mx = best[i];
pos = i;
}
}
fout << mx << "\n";
tip(pos);
return 0;
}