Pagini recente » Cod sursa (job #3221086) | Cod sursa (job #2650585) | Cod sursa (job #3214785) | Cod sursa (job #340124) | Cod sursa (job #708871)
Cod sursa(job #708871)
#include<cstdio>
#define inf 2000000010
#define nmax 100005
int a[nmax],q[nmax],p[nmax],s[nmax],n,len;
void readdata(){
freopen("scmax.in","r",stdin);
scanf("%d\n",&n);
for(int i=1;i<=n;++i)scanf("%d ",&a[i]);
}
int insert(int k,int lo,int hi){
int mid=(lo+hi)/2;
if(lo==hi){
if(hi>len)q[++len+1]=inf;
q[lo]=k;
return lo;
}
else if(k<q[mid])return insert(k,lo,mid);
else return insert(k,mid+1,hi);
}
void buildPQ(void){
int place,i;
len=0; q[1]=inf;
for(i=1;i<=n;++i)
p[i]=insert(a[i],1,len+1);
}
void buildS(void){
int i,k=n;
for(i=len;i;i--)
{
while(p[k]!=i)k--;
s[i]=a[k];
}
}
void WriteSolution(void){
freopen("scmax.out","w",stdout);
printf("%d\n",len);
for(int i=1;i<=len;++i)printf("%d ",s[i]);
}
int main(void){
readdata();
buildPQ();
buildS();
WriteSolution();
return 0;
}