Pagini recente » Cod sursa (job #3215432) | Cod sursa (job #2978936) | Cod sursa (job #2824141) | Cod sursa (job #718897) | Cod sursa (job #2964265)
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX = 1e5 + 2;
const int inf = 2e9 + 1;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int dp[MAX] , pre[MAX], a , n , pozmax;
// dp[i] = numarul minim cu care s-ar termina o secventa de lungime i;
void afisare( int ind ){
if(ind == 0){
return;
}
afisare(ind-1);
cout << dp[ind] << ' ';
}
int main()
{
cin >> n;
dp[0] = 0;
int maxim = 0;
for(int i = 1 ; i <= n ; i++){
dp[i] = inf;
}
for(int i = 1 ; i <= n ; i++){
cin >> a;
int x = upper_bound(dp,dp+1+n,a) - dp;
if( a > dp[x-1] && a < dp[x]){
dp[x] = a;
if( x > maxim ){
maxim = x;
pozmax = x;
}
}
}
cout << maxim << '\n';
afisare(pozmax);
return 0;
}