Pagini recente » Cod sursa (job #1915777) | Cod sursa (job #3159432) | Cod sursa (job #1748178) | Cod sursa (job #2255524) | Cod sursa (job #3282604)
#include <fstream>
#include <vector>
#include <queue>
#include <string>
using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");
int n,a[100005],k,b[100005],poz[100005],poz2[100005],l,r,mij,p;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i];
k=1;
b[1]=a[1];
poz[1]=1;
for(int i=2;i<=n;i++)
{
if(a[i]>=b[k])
{
if(a[i]>b[k])
{
b[++k]=a[i];
poz[i]=k;
}
}
else
{
l=1;
r=k;
p=k+1;
while(l<=r)
{
mij=(l+r)/2;
if(b[mij]>=a[i])
{
p=mij;
r=mij-1;
}
else
l=mij+1;
}
b[p]=a[i];
poz[i]=p;
}
}
int j=n;
for(int i=k;i>=1;i--)
{
while(poz[j]!=i)
j--;
poz2[i]=j;
}
cout<<k<<'\n';
for(int i=1;i<=k;i++)
cout<<a[poz2[i]]<<' ';
return 0;
}