Pagini recente » Cod sursa (job #187826) | Cod sursa (job #2830891) | Cod sursa (job #1534439) | Cod sursa (job #2885678) | Cod sursa (job #1259745)
#include <fstream>
#include <cstdio>
using namespace std;
int n,i,k,u,p,m,poz[100010],q[100010],j,pp,po;
long long v[100010],mi,r[100010];
int main(){
freopen("scmax.in","r",stdin);
ofstream g ("scmax.out");
scanf("%d",&n);
for(i=1;i<=n;i++)
scanf("%lld",&v[i]);
k=1;
q[k]=v[1];
poz[1]=1;
for(i=2;i<=n;i++){
p=1;u=k;
m=(p+u)/2;
while(p<u)
{
if(q[m]<v[i])p=m+1;
else if(q[m]>=v[i])u=m-1;
m=(p+u)/2;
}
if(m==0)m++;
if(q[m]>v[i]){q[m]=v[i];poz[i]=m;}
else
if(not(q[m]==v[i])){k++;poz[i]=k;q[k]=v[i];}}
g<<k<<'\n';
pp=n;
for(i=k;i>=1;i--){
mi=0;
for(j=pp;j>=1;j--)
if(poz[j]==i&&mi==0){mi=v[j];pp=j;}
else
if(poz[j]==i&&mi>v[j]){mi=v[j];pp=j;}
po++;r[po]=mi;}
for(i=po;i>=1;i--)
g<<r[i]<<" ";
return 0;}