Pagini recente » Cod sursa (job #2072455) | Cod sursa (job #2011976) | Cod sursa (job #1593938) | Cod sursa (job #1999028) | Cod sursa (job #1998580)
#include <fstream>
#include <iostream>
#include <cmath>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int v[100001], lg[100001], prev[100001], sir[100001], i, n, stg, dr, mid;
int main()
{
fin>>n;
for (i=1;i<=n;i++)
fin>>v[i];
lg[0]=0;
for (i=1;i<=n;i++)
{
stg=1;
dr=lg[0];
while (stg<=dr)
{
mid=ceil(stg+(dr-stg)/2);
if (v[lg[mid]]<v[i])
stg=mid+1;
else dr=mid-1;
}
if (stg>lg[0])
lg[0]++;
lg[stg]=i;
prev[i]=lg[stg-1];
}
fout<<lg[0]<<endl;
n=lg[lg[0]];
for (i=1;i<=lg[0];i++)
{
sir[i]=v[n];
n=prev[n];
}
for (i=lg[0];i>=1;i--)
fout<<sir[i]<<" ";
}