Pagini recente » Cod sursa (job #313297) | Cod sursa (job #921761) | Cod sursa (job #3004305) | Cod sursa (job #3269999) | Cod sursa (job #729053)
Cod sursa(job #729053)
#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");
void afisare(int p){
if(p){
afisare(T[p]);
fprintf(g,"%d ",V[p]);
}
}
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<k)
Z[x+1]=i;
else
Z[++k]=i;
T[i]=Z[x];
}
fprintf(g,"%d\n",k);
afisare(Z[k]);
return 0;
}