Pagini recente » Mihnea Andreescu | Cod sursa (job #1514003) | Rating Delegeanu Alexandru (Dele) | Monitorul de evaluare | Cod sursa (job #1682816)
#include <stdio.h>
int v[100000],s[100000],p[100000];
int main(){
FILE *fin=fopen("scmax.in","r");
FILE *fout=fopen("scmax.out","w");
int n,i,t,poz,st,dr,mij,j;
fscanf(fin,"%d",&n);
fscanf(fin,"%d",&v[0]);
s[0]=v[0];
t=1;
for(i=1; i<n; i++){
fscanf(fin,"%d",&v[i]);
poz=mij=-1;
st=0;
dr=t-1;
while(st<=dr){
mij=(st+dr)/2;
if(s[mij]>=v[i]){
poz=mij;
dr=mij-1;
}else
st=mij+1;
}
if(poz==-1){
s[t]=v[i];
p[i]=t;
t++;
}else{
s[poz]=v[i];
p[i]=poz;
}
}
fprintf(fout,"%d\n",t);
j=n-1;
for(i=t-1; i>=0; i--){
while(p[j]!=i)
j--;
s[i]=v[j];
}
for(i=0; i<t; i++)
fprintf(fout,"%d ",s[i]);
fclose(fin);
fclose(fout);
return 0;
}