Pagini recente » Cod sursa (job #2022264) | Cod sursa (job #1121489) | Teoria jocurilor: numerele Sprague-Grundy | Arhiva de probleme | Cod sursa (job #1215614)
#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];
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;
while ( st <= dr )
{
m = (st + dr) / 2;
if ( a[Ind[m]] < a[i] )
st = m + 1;
else
dr = m - 1;
}
return dr;
}
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] << ' ';
}