Pagini recente » Cod sursa (job #2967449) | Cod sursa (job #2245590) | Cod sursa (job #2485471) | Cod sursa (job #879717) | Cod sursa (job #2404171)
#include <bits/stdc++.h>
#define maxn 100000
using namespace std;
int v[maxn+5], cap[maxn+5], prew[maxn+5];
ifstream fin ( "scmax.in" );
ofstream fout ( "scmax.out" );
void sol ( int p )
{
if ( prew[p] > 0 ) sol(prew[p]);
fout << v[p] << ' ';
}
int main ()
{
int n; fin >> n;
int i, j, scm = 1, pas;
for ( i = 1; i <= n; i++ ) fin >> v[i];
for ( cap[1] = 1, i = 2; i <= n; i++ )
{
for ( j = 0, pas = (1<<17); pas > 0; pas /= 2 )
if ( j + pas <= scm && v[cap[j+pas]] < v[i] ) j += pas;
if ( j == 0 && v[cap[1]] > v[i] ) cap[1] = i;
else if ( j >= 1 )
{
cap[j+1] = i;
prew[i] = cap[j];
scm = max(scm, j+1);
}
}
fout << scm << '\n';
sol (cap[scm]);
fin.close ();
fout.close ();
return 0;
}