Pagini recente » Cod sursa (job #1471907) | Cod sursa (job #1091420) | Cod sursa (job #2191354) | Cod sursa (job #810312) | Cod sursa (job #1006383)
#include <iostream>
#include <fstream>
using namespace std;
const int Nmax = 100005;
int N, best;
int V[Nmax], P[Nmax], Q[Nmax];
void read()
{
freopen("scmax.in", "r", stdin);
scanf("%d\n", &N);
for ( int i = 1; i <= N; ++i )
scanf("%d ", &V[i]);
fclose( stdin );
}
int bin_search( int key )
{
int st = 1, dr = best, found = -1;
while ( st <= dr )
{
int m = st + ( dr - st ) / 2;
if ( Q[m] == key )
{
return m;
}
if ( Q[m] > key )
{
found = m;
dr = m - 1;
}
else
st = m + 1;
}
return found;
}
void LIS()
{
for ( int i = 1; i <= N; ++i )
{
int position = bin_search( V[i] );
if ( position != -1 )
{
P[i] = position;
Q[position] = V[i];
}
else
{
Q[ ++best ] = V[i];
P[i] = i;
}
}
}
void print()
{
freopen("scmax.out", "w", stdout);
printf("%d\n", best);
for ( int i = 1; i <= best; ++i )
printf("%d ", Q[i]);
}
int main()
{
read();
LIS();
print();
return 0;
}