Pagini recente » Cod sursa (job #2049492) | Cod sursa (job #2885925) | Cod sursa (job #3004992) | Cod sursa (job #523989) | Cod sursa (job #570363)
Cod sursa(job #570363)
#include<cstdio>
#define MAX 100004
using namespace std;
int v[MAX], a[MAX], b[MAX];
int length, n;
int BinarySearch(int i)
{
int middle, left=1, right=length, max_length=0;
while(left<=right)
{
middle = (left+right)/2;
if(v[a[middle]]<v[i])
{
max_length=middle;
left = middle+1;
}
else
right = middle-1;
}
return max_length;
}
void dp()
{
int i, j;
length = 1;
a[1]=1;
for(i = 2 ; i <= n ; ++i)
{
j=BinarySearch(i);
if(!a[j+1])
{
a[j+1] = i;
length++;
}
else
if(v[a[j+1]]>v[i])
a[j+1] = i;
b[i] = a[j];
}
}
void write(int i)
{
if(b[i])
write(b[i]);
printf("%d ",v[i]);
}
int main()
{
freopen("scmax.in" , "r" , stdin);
freopen("scmax.out","w",stdout);
scanf("%d\n", &n);
for (int i = 1 ; i <= n ; ++i)
scanf("%d ", &v[i]);
dp();
printf("%d\n",length);
write(a[length]);
fclose(stdin);
fclose(stdout);
return 0;
}