Pagini recente » Cod sursa (job #74049) | Cod sursa (job #205817) | Cod sursa (job #2600724) | Cod sursa (job #1610154) | Cod sursa (job #1344547)
#include <stdio.h>
#include <stdlib.h>
int v[100000],q[100000],p[100000],v1[100000];
int main(){
FILE*fi,*fout;
int i,n,m,j,x,st,dr,mij,nr,z;
fi=fopen("scmax.in" ,"r");
fout=fopen("scmax.out" ,"w");
fscanf(fi,"%d" ,&n);
m=x=0;
for(i=0;i<n;i++){
fscanf(fi,"%d" ,&v[i]);
if(m==0){
q[m++]=v[i];
p[x++]=m-1;
}
else
if(q[m-1]<v[i]){
q[m++]=v[i];
p[x++]=m-1;
}
else
if(q[0]>v[i]){
q[0]=v[i];
p[x++]=0;
}
else{
st=0;
dr=m;
while(dr-st>1){
mij=(st+dr)/2;
if(q[mij]>v[i])
dr=mij;
else
st=mij;
}
while(q[st]<=v[i])
st++;
q[st]=v[i];
p[x++]=i;
}
}
fprintf(fout,"%d\n" ,m);
nr=m-1;
z=0;
for(j=x-1;j>=0;j--)
if(p[j]==nr){
v1[z++]=v[j];
nr--;
}
for(i=z-1;i>=0;i--)
fprintf(fout,"%d " ,v1[i]);
fclose(fi);
fclose(fout);
return 0;
}