Pagini recente » Cod sursa (job #2155312) | Cod sursa (job #43732) | Cod sursa (job #1613313) | Cod sursa (job #1784327) | Cod sursa (job #1435604)
#include<fstream>
#include<vector>
#include<algorithm>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
const int N=100003;
int n,i,l,r,mij,sol,k;
vector<int> a(N), v(N), p(N),s;
int main()
{
cin>>n;
for (i=1;i<=n;i++)cin>>a[i];
v[0]=0;a[0]=-(int)1e9;
k=1; v[k]=1;
for (i=2;i<=n;i++)
if (a[i]>a[v[k]]) v[++k]=i,p[i]=v[k-1];
else {
l=0;r=k-1;
while (l<=r){
mij=(l+r)/2;
if (a[v[mij]]<a[i])sol=mij,l=mij+1;
else r=mij-1;
}
// cout<<sol<<'\n';
p[i]=p[v[++sol]];
v[sol]=i;
}
cout<<k<<'\n';
for (int t=v[k];t;t=p[t])s.push_back(t);
reverse(s.begin(),s.end());
for (i=0;i<s.size();i++)cout<<a[s[i]]<<' ';
return 0;
}