Pagini recente » Cod sursa (job #2937901) | Cod sursa (job #2513704) | Cod sursa (job #2271002) | Cod sursa (job #976156) | Cod sursa (job #2871094)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
const string filename = "scmax";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");
const int maxN = 100005;
int n, pow2, ans, v[maxN], dp[maxN], s[maxN];
int cautbin(int x)
{
int aux = 0;
for(int i = pow2; i > 0; i >>= 1)
{
if(aux + i <= n && (s[aux + i] > x))
aux += i;
}
return aux + 1;
}
int main()
{
fin >> n;
for(int i = 1; i <= n; i++)
fin >> v[i];
pow2 = 1;
while(pow2 * 2 <= n)
pow2 *= 2;
for(int i = n; i >= 1; i--)
{
int poz = cautbin(v[i]);
dp[i] = poz;
s[poz] = max(s[poz], v[i]);
ans = max(ans, dp[i]);
}
fout << ans << '\n';
for(int i = 1; i <= n; i++)
if(dp[i] == ans)
{
fout << v[i] << ' ';
ans--;
}
return 0;
}