Pagini recente » Cod sursa (job #2161611) | Cod sursa (job #292897) | Cod sursa (job #919067) | Cod sursa (job #2118168) | Cod sursa (job #2759169)
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int n, a[100001], nr, dp[100001], l, v[100001], sol[100001], cl;
void read()
{
cin >> n;
for (int i=1; i<=n; i++)
{
cin >> a[i];
}
}
int cautare_binara(int x)
{
int st, dr, mij;
st=1;
dr=l;
while (st<=dr)
{
mij=(st+dr)/2;
if (v[mij]>=x)
{
dr=mij-1;
}
else
{
st=mij+1;
}
}
v[st]=x;
return st;
}
void solve()
{
for (int i=1; i<=n; i++)
{
if (a[i]>v[l])
{
dp[i]=l+1;
v[++l]=a[i];
}
else
dp[i]=cautare_binara(a[i]);
}
cl=l;
for (int i=n; i>=1; i--)
{
if (dp[i]==l)
{
sol[l]=a[i];
l--;
}
}
}
void output()
{
cout << cl << '\n';
for (int i=1; i<=cl; i++)
{
cout << sol[i] << ' ';
}
}
int main()
{
read();
solve();
output();
return 0;
}