Pagini recente » Profil Knorbi | Diferente pentru utilizator/stargold2 intre reviziile 262 si 261 | Profil gizzehhh | Cod sursa (job #2013053) | Cod sursa (job #1821856)
#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 = lower_bound(dp + 1, dp + rasp + 1, v[i]) - dp;
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;
}