Pagini recente » Cod sursa (job #587700) | Cod sursa (job #1372987) | Cod sursa (job #166151) | Cod sursa (job #376153) | Cod sursa (job #1215609)
// OK
#include <fstream>
#include <iomanip>
using namespace std;
const int Dim = 100001;
ifstream is("scmax.in");
ofstream os("scmax.out");
int a[Dim], n, L;
int Ind[Dim];
int P[Dim];
void Read();
void Write(int k);
int Din();
int BS(int i);
int main()
{
Read();
for (int i = 1; i <= n; ++i )
{
int j = BS(i);
P[i] = Ind[j - 1];
Ind[j] = i;
if (j == L + 1)
L++;
}
os << L << '\n';
Write(Ind[L]);
is.close();
os.close();
return 0;
}
int BS(int i)
{
int st = 1, dr = L, m, j = L + 1;
while ( st <= dr )
{
m = (st + dr) / 2;
if ( a[i] < a[Ind[m]] )
dr = m - 1, j = m;
else
st = m + 1;
}
return j;
}
void Read()
{
is >> n;
for ( int i = 1; i <= n; ++i )
is >> a[i];
}
void Write(int k)
{
if ( !k ) return;
Write(P[k]);
os << a[k] << ' ';
}