Pagini recente » Cod sursa (job #2822645) | Cod sursa (job #2354474) | Cod sursa (job #304170) | Cod sursa (job #61089) | Cod sursa (job #1020838)
#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);
}
}
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 ok ? dr : 0;
}
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] << ' ';
}