Pagini recente » Cod sursa (job #413083) | Cod sursa (job #2695835) | Cod sursa (job #404915) | Cod sursa (job #2681955) | Cod sursa (job #2370029)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ( "scmax.in" );
ofstream fout ( "scmax.out" );
int dp[100001];
int a[100001];
int ant[100001];
int v[1000001];
int nr, n;
int caut ( int x )
{
int lo = 0, hi = nr + 1, mid;
while ( hi - lo > 1 )
{
mid = ( lo + hi ) / 2;
if ( x > a[v[mid]] )
lo = mid;
else
hi = mid;
}
return lo;
}
int main()
{
fin >> n;
for ( int i = 1; i <= n; i++ )
fin >> a[i];
dp[1] = 1;
v[1] = 1;
nr = 1;
for ( int i = 2; i <= n; i++ )
{
int x = caut ( a[i] );
if ( x + 1 > nr )
nr++;
dp[i] = x + 1;
v[x + 1] = i;
ant[i] = v[x];
}
int m = 0, imax;
for ( int i = 1; i <= n; i++ )
if ( dp[i] > m )
{
m = dp[i];
imax = i;
}
fout << m << '\n';
int x = imax;
/*
for ( int i = 1; i <= n; i++ )
fout << ant[i] << ' ';
*/
vector<int>sol;
while ( x != 0 )
{
sol.push_back ( a[x] );
x = ant[x];
}
for ( vector<int>::reverse_iterator it = sol.rbegin(); it != sol.rend(); it++ )
fout << *it << ' ';
return 0;
}