Pagini recente » Cod sursa (job #2181286) | Cod sursa (job #2830443) | Cod sursa (job #2939552) | Cod sursa (job #3030289) | Cod sursa (job #2575837)
#include <bits/stdc++.h>
using namespace std;
ifstream fin( "scmax.in" );
ofstream fout( "scmax.out" );
int n,a[100005],r[100005],dp[100005],lun;
vector<int> sol;
int main()
{
fin>>n;
for(int i=1;i<=n;i++)
{
fin>>a[i];
r[i]=INT_MAX;
}
r[1]=a[1];
lun=1;
dp[1]=1;
for(int i=2;i<=n;i++)
{
int s=0,d=lun+1;
while(s!=d)
{
int m=(s+d+1)/2;
if(a[i]>r[m])
s=m;
else
d=m-1;
}
dp[i]=s+1;
lun=max(s+1,lun);
r[s+1]=a[i];
}
fout<<lun<<endl;
int p=lun,el=0;
for(int i=n;i>=1&&p>0;i--)
if(p==dp[i])
{
if(el==0)
el=a[i];
if(el>=a[i])
{
sol.push_back(a[i]);
p--;
}
}
sort(sol.begin(),sol.end());
for(auto it:sol)
fout<<it<<' ';
return 0;
}