Pagini recente » Cod sursa (job #1631750) | Cod sursa (job #1283) | Cod sursa (job #164766) | Cod sursa (job #597976) | Cod sursa (job #3210007)
#include <fstream>
#include <algorithm>
using namespace std ;
ifstream cin ("scmax.in") ;
ofstream cout ("scmax.out") ;
const int dim = 100000 ;
int n, v[dim + 2], dp[dim + 2], pos[dim + 2], best[dim + 2], idx = 1 ;
void out (int start)
{
if (pos[start] > 0)
out(pos[start]) ;
cout << v[start] << ' ' ;
}
int b_search (int x)
{
int l = 0, r = idx, mid ;
while (l <= r)
{
mid = (l + r) / 2 ;
if (v[dp[mid]] < x && v[dp[mid + 1]] >= x)
return mid ;
else if (v[dp[mid + 1]] < x)
l = mid + 1 ;
else
r = mid - 1 ;
}
return idx ;
}
int main()
{
int start, max1 = -1 ;
cin >> n ;
for (int i = 1 ; i <= n ; i ++)
cin >> v[i] ;
best[1] = dp[1] = 1 ;
for (int i = 2 ; i <= n ; i ++)
{
int p = b_search (v[i]) ;
pos[i] = dp[p] ;
best[i] = p + 1 ;
dp[p + 1] = i ;
if (idx < p + 1)
idx = p + 1 ;
}
for (int i = 1 ; i <= n ; i ++)
if (best[i] > max1)
max1 = best[i], start = i ;
cout << max1 << '\n' ;
out(start) ;
return 0 ;
}