Pagini recente » Cod sursa (job #1049980) | Cod sursa (job #1265728) | Cod sursa (job #668440) | Rating Badea Dragos (ghiarad) | Cod sursa (job #1821854)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const int nMax = 100005;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n;
int v[nMax];
int dp[nMax];
int last[nMax];
int rasp;
void citire()
{
in >> n;
for(int i = 1; i <= n; ++i)
in >> v[i];
}
void rezolvare()
{
int pos;
dp[1] = v[1];
rasp = 1;
for(int i = 2; i <= n; ++i)
{
pos = upper_bound(dp + 1, dp + rasp + 1, v[i]) - dp;
if(dp[pos-1] == v[i])
--pos;
dp[pos] = v[i];
rasp = max(pos, rasp);
last[i] = pos;
}
}
void afisare()
{
out << rasp << "\n";
int t = rasp;
for(int i = n; i > 0; --i)
{
if(last[i] == t)
{
dp[t] = v[i];
--t;
}
}
for(int i = 1; i <= rasp; ++i)
out << dp[i] << " ";
}
int main()
{
citire();
rezolvare();
afisare();
return 0;
}