Pagini recente » Cod sursa (job #783598) | Profil CorinaPuscas | Cod sursa (job #2055554) | Cod sursa (job #2754885) | Cod sursa (job #2864766)
#include <fstream>
using namespace std;
#pragma GCC optimize ("Ofast")
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int pow2, ans, n, v[100005], dp[100005], s[100005], cap, afis;
int cautbin(int x)
{
int sol = 0;
for(int i = pow2; i > 0; i >>= 1)
{
if(sol + i <= n && s[sol + i] > x)
sol += i;
}
return sol + 1;
}
int main()
{
ios_base::sync_with_stdio(false);
fin >> n;
pow2 = 1;
while(pow2 * 2 <= n)
pow2 *= 2;
for(int i = 1; i <= n; i++)
fin >> v[i];
for(int i = n; i > 0; i--)
{
int poz = cautbin(v[i]);
dp[i] = poz;
s[poz] = max(s[poz], v[i]);
if(dp[i] >= ans)
{
ans = dp[i];
cap = i;
}
}
fout << ans << '\n';
fout << v[cap] << ' ';
for(int i = 1; i <= n; i++)
{
if(v[i] > v[cap] && dp[i] == dp[cap] - 1)
{
cap = i;
fout << v[cap] << ' ';
}
}
return 0;
}