Pagini recente » Cod sursa (job #2979866) | Cod sursa (job #2964000) | Cod sursa (job #606137) | Cod sursa (job #1372465) | Cod sursa (job #727933)
Cod sursa(job #727933)
#include<stdio.h>
#define val 100010
int k , n , V[val], Z[val], mij, x,poz,i,T[val];
FILE*f=fopen("scmax.in","r");
FILE*g=fopen("scmax.out","w");
int cautare(int nr){
int st=1,dr=k;
while(st<=dr){
mij=(st+dr)/2;
if(V[Z[mij]]>nr){
dr=mij-1;
}
else{
if(V[Z[mij+1]]>nr){
poz=mij;
return poz;
}
else{
st=mij+1;
}
}
}
if(V[Z[mij]]>nr)
mij--;
return mij;
}
int main(){
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&V[i]);
Z[1]=1;k=1;
for(i=2;i<=n;i++){
x=cautare(V[i]);
if(V[Z[x]]==V[i])
continue;
if(!x){
Z[1]=i;
}
else{
if(x<k){
Z[x+1]=i;
}
else{
Z[++k]=i;
T[k]=V[Z[k-1]];
}
}
}
fprintf(g,"%d\n",k);
for(i=2;i<=k;i++)
fprintf(g,"%d ",T[i]);
fprintf(g,"%d",V[Z[k]]);
return 0;
}