Pagini recente » Cod sursa (job #828634) | Cod sursa (job #1668172) | Cod sursa (job #2924091) | Cod sursa (job #2588358) | Cod sursa (job #1245042)
#include <cstdio>
#include <cmath>
#define NMAX 100005
using namespace std;
int N, count, no[NMAX][2], L[NMAX], max;
int search(int number, int l, int r)
{
if(l >= r)
{
if(number > no[L[r]][0])
return r;
return r-1;
}
int m = (l + r) >> 1;
if(number > no[L[m]][0])
return search(number, m + 1, r);
else if(number < no[L[m]][0])
return search(number, l, m - 1);
else
return m - 1;
}
int main() {
freopen("scmax.in", "r", stdin);
freopen("scmax.out", "w", stdout);
scanf("%d", &N);
for(int i = 1; i <= N; i++)
{
scanf("%d", &no[i][0]);
int x = search(no[i][0], 0, max);
no[i][1] = L[x];
L[x+1] = i;
if(x == max)
max = x + 1;
}
printf("%d\n", max);
int cur = L[max], i = max;
while(cur)
{
L[i] = no[cur][0];
i--;
cur = no[cur][1];
}
for(int i = 1; i <= max; i++)
printf("%d ", L[i]);
return 0;
}