Pagini recente » Cod sursa (job #2134377) | Cod sursa (job #59570) | Cod sursa (job #378261) | Cod sursa (job #2530366) | Cod sursa (job #2152745)
#include <fstream>
#define N 100001
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int n, pos, len, v[N], ind[N], pre[N];
inline int upperBound ( int x )
{
int st, mij, dr;
st = 1, dr = len + 1;
while ( st < dr )
{
mij = (st + dr) / 2;
if ( x > v[ ind[mij] ] )
st = mij + 1;
else
dr = mij - 1;
}
return st;
}
void printSol ( int i );
int main()
{
ios::sync_with_stdio (false);
int i;
fin >> n;
for ( i = 1; i <= n; ++i )
fin >> v[i];
ind[1] = len = 1;
for ( i = 2; i <= n; ++i )
{
pos = upperBound( v[i] );
pre[i] = ind[pos-1];
ind[pos] = i;
if ( pos > len )
len = pos;
}
fout << len << '\n';
printSol ( ind[len] );
}
void printSol ( int i )
{
if ( i > 0 )
{
printSol ( pre[i] );
fout << v[i] << " ";
}
}