Pagini recente » Cod sursa (job #375056) | Cod sursa (job #2868864) | Cod sursa (job #1936890) | Cod sursa (job #2340190) | Cod sursa (job #1561880)
#include <fstream>
#define ValN 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N, i, cnt, c;
int sir[ValN], a;
int be, en, mid, x, mx;
int dp[ValN], inv[ValN];
int v[ValN];
int main()
{
fin >> N;
for (i=1; i<=N; i++)
{
fin >> v[i];
inv[i]=2000000000;
}
for (i=1; i<=N; i++)
{
be=1;
en=i-1;
x=0;
while (be<=en)
{
mid=(be+en) / 2;
if (inv[mid]>=v[i])
en=mid-1;
else
{
be=mid+1;
x=max(x, mid);
}
mid=(be+en) / 2;
}
dp[i]=x+1;
if (dp[i]>mx)
{
mx=dp[i];
cnt=i;
}
inv[dp[i]]=min(inv[dp[i]], v[i]);
}
fout << mx << '\n';
c=cnt;
sir[++a]=v[cnt];
for (i=c-1; i>=1; i--)
{
if (dp[cnt]==dp[i]+1 && v[i]<v[cnt])
{
sir[++a]=v[i];
cnt=i;
}
}
for (i=mx; i>=1; i--)
fout << sir[i] << " ";
fin.close();
fout.close();
return 0;
}