Pagini recente » Cod sursa (job #2588042) | Cod sursa (job #1824579) | Cod sursa (job #557279) | Cod sursa (job #922127) | Cod sursa (job #2696639)
#include <stdio.h>
#include <stdlib.h>
int v[100000],s[100000],pred[100000];
FILE *fin, *fout;
int cautbin(int x, int e){
int b,m;
b=0;
while(e-b>1){
m=(b+e)/2;
if(v[s[m]]>x)
e=m;
else
b=m;
}
if(x>v[s[b]])
b++;
return b;
}
int printSir(int i){
if(pred[i]==-1)
fprintf(fout,"%d ",v[i]);
else{
printSir(pred[i]);
fprintf(fout,"%d ",v[i]);
}
}
int main(){
int n,i,max,k,pos;
fin=fopen("scmax.in","r");
fscanf(fin,"%d",&n);
for(i=0;i<n;i++)
fscanf(fin,"%d",&v[i]);
fclose(fin);
max=1;
pred[0]=-1;
for(i=1;i<n;i++){
pos=cautbin(v[i],max+1);
s[pos]=i;
if(pos==0)
pred[i]=-1;
else
pred[i]=s[pos-1];
if(pos>max)
max=pos;
}
fout=fopen("scmax.out","w");
fprintf(fout,"%d\n",max+1);
printSir(s[max]);
fclose(fout);
return 0;
}