Pagini recente » Cod sursa (job #901340) | Cod sursa (job #2407474) | Cod sursa (job #1647010) | Cod sursa (job #2864541) | Cod sursa (job #900696)
Cod sursa(job #900696)
#include <stdio.h>
#define nmax 100001
#define inf 2000000002
using namespace std;
int n,v[nmax],p[nmax],q[nmax],s[nmax],l;
void cit()
{
freopen("scmax.in","r",stdin);
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&v[i]);
q[i]=inf;
}
fclose(stdin);
}
void init(int k,int st,int dr,int poz)
{
int m;
if(st==dr){
if(q[st]>k){
q[st]=k;
p[poz]=st;
}
}
else
{
m=(st+dr)/2;
if(k<=q[m])
init(k,st,m,poz);
else
init(k,m+1,dr,poz);
}
}
void afis()
{
int k=n,i;
for(i=l;i>0;i--){
while(i!=p[k])
k--;
s[i]=v[k];
}
for(i=1;i<=l;i++)
printf("%d ",s[i]);
}
int main()
{ cit();
for(int i=1;i<=n;i++){
init(v[i],1,l+1,i);
if(q[l+1]!=inf)
l++;
}
freopen("scmax.out","w",stdout);
printf("%d\n",l);
afis();
fclose(stdout);
return 0;
}