Pagini recente » Cod sursa (job #334279) | Cod sursa (job #1182492) | Cod sursa (job #2401721) | Cod sursa (job #1464713) | Cod sursa (job #971691)
Cod sursa(job #971691)
#include <fstream>
#define NMax 100005
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int N,X[NMax],DP[NMax],Succ[NMax],L[NMax],K,Max,PMax;
void Read()
{
fin>>N;
for(int i=1;i<=N;i++)
fin>>X[i];
}
int Binary_Search(int val)
{
int s=1,d=K,Sol=0;
while(s<=d)
{
int mid=(s+d)/2;
if(X[L[mid]]>val)
{
Sol=mid;
s=mid+1;
}
else
d=mid-1;
}
return Sol;
}
void Solve()
{
int i,j;
DP[N]=1;K=1;L[1]=N;
for(i=N-1;i>=1;i--)
{
j=Binary_Search(X[i]);
DP[i]=DP[L[j]]+1;
Succ[i]=L[j];
L[j+1]=i;
if(j==K)
K++;
}
for(i=1;i<=N;i++)
{
if(DP[i]>Max)
{
Max=DP[i];
PMax=i;
}
}
}
void Print()
{
int i=PMax;
fout<<Max<<"\n";
while(i)
{
fout<<X[i]<<" ";
i=Succ[i];
}
}
int main()
{
Read();
Solve();
Print();
return 0;
}