Pagini recente » Cod sursa (job #2205932) | Cod sursa (job #204153) | Cod sursa (job #1719070) | Cod sursa (job #2480061) | Cod sursa (job #2246767)
#include <stdio.h>
#include <stdlib.h>
int afis[100000][2];
int lung[100001];
int v[100000];
int max;
int cautb(int k){
int r,p;
r=0;
p=1<<16;
while(p>0){
if(r+p<=max && afis[lung[r+p]][0]<k)
r+=p;
p/=2;
}
return r;
}
int main()
{
int n,i,j,poz;
FILE*fi,*fo;
fi=fopen("scmax.in","r");
fo=fopen("scmax.out","w");
fscanf(fi,"%d",&n);
lung[0]=-1;
for(i=0;i<n;i++){
fscanf(fi,"%d",&afis[i][0]);
j=cautb(afis[i][0]);
afis[i][1]=lung[j];
lung[j+1]=i;
if(j+1>max)
max=j+1;
}
poz=lung[max];
for(i=0;i<max;i++)
{
v[max-i-1]=afis[poz][0];
poz=afis[poz][1];
}
fprintf(fo,"%d\n",max);
for(i=0;i<max;i++)
{
fprintf(fo,"%d ",v[i]);
}
fclose(fi);
fclose(fo);
return 0;
}