Pagini recente » Cod sursa (job #2909706) | Cod sursa (job #2375289) | Cod sursa (job #2446401) | Cod sursa (job #917410) | Cod sursa (job #2762441)
#include <fstream>
using namespace std;
ifstream in ("scmax.in");
ofstream out ("scmax.out");
int n, a[100001], nr, dp[100001], k, v[100001], sol[100001] ck;
void read()
{
in >> n;
for (int i=1; i<=n; i++)
in >> a[i];
}
int cautare_binara(int x)
{
int st, dr, mij;
st=1;
dr=k;
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[k])
{
dp[i]=k+1;
v[++k]=a[i];
}
else
dp[i]=cautare_binara(a[i]);
ck=k;
for (int i=n; i>=1; i--)
{
if (dp[i]==k)
{
sol[k]=a[i];
k--;
}
}
}
void output()
{
out << ck << '\n';
for (int i=1; i<=k; i++)
out << v[i] <<" ";
}
int main()
{
read();
solve();
output();
return 0;
}