Pagini recente » Cod sursa (job #668977) | Cod sursa (job #3261625) | Cod sursa (job #2516525) | Cod sursa (job #1040646) | Cod sursa (job #1041936)
// 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 st, int dr);
int main()
{
Read();
for (int i = 1; i <= n; ++i )
{
int j = BS(i, 1, L);
P[i] = Ind[j];
// if (j == L or a[i] < a[Ind[j+1]])
// {
Ind[j + 1] = i;
L = max(L, j + 1);
//W }
}
os << L << '\n';
Write(Ind[L]);
is.close();
os.close();
return 0;
}
int BS(int i, int st, int dr)
{
int m;
bool ok = false;
while ( st <= dr )
{
m = (st + dr) / 2;
if ( a[Ind[m]] < a[i] )
st = m + 1, ok = true;
else
dr = m - 1;
}
return dr; // daca L = 0 => dr = 0; daca a[i] > a[Ind[L]] => dr = L
}
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] << ' ';
}