Pagini recente » Cod sursa (job #3161238) | Cod sursa (job #314083) | Cod sursa (job #3280075) | Cod sursa (job #2549344) | Cod sursa (job #1375722)
#include <cstdio>
using namespace std;
const int MAXN = 100003;
int x[MAXN], m[MAXN], p[MAXN];
FILE *out = fopen("scmax.out", "w");
void afis(int i)
{
if (i == 0)
return;
afis(p[i]);
fprintf(out, "%d ", x[i]);
}
int main()
{
FILE *in = fopen("scmax.in", "r");
int n;
fscanf(in, "%d", &n);
for (int i = 1; i <= n; i++)
fscanf(in, "%d", &x[i]);
int l = 1;
m[1] = 1;
for (int i = 2; i <= n; i++)
{
int left = 1;
int right = l;
while (left <= right)
{
int mid = (left+right+1)/2;
if (x[m[mid]] < x[i])
left = mid+1;
else
right = mid-1;
}
p[i] = m[left-1];
m[left] = i;
if (left > l)
l = left;
}
fprintf(out, "%d\n", l);
afis(m[l]);
fprintf(out, "\n");
return 0;
}