Pagini recente » Cod sursa (job #2822453) | Cod sursa (job #689712) | Cod sursa (job #2860730) | Cod sursa (job #2106334) | Cod sursa (job #1089072)
#include <stdio.h>
#define IN "scmax.in"
#define OUT "scmax.out"
#define NMAX 100005
FILE * fin=fopen(IN,"r");
FILE * fout=fopen(OUT,"w");
int best[NMAX],poz[NMAX],sir[NMAX],a[NMAX];
int st,dr,mij,lgmax,i,k,n,x;
int cautare_binara();
int main()
{
fscanf(fin,"%d",&n);
for(i=1;i<=n;i++)
fscanf(fin,"%d",&a[i]);
for(i=1;i<=n;i++)
{
if(a[i]>=best[k])
{
best[++k]=a[i];
poz[i]=k;
}
else
{
x=cautare_binara();
best[x]=a[i];
poz[i]=x;
}
}
lgmax=k;
for(i=n;i>=1;i--)
{
if(poz[i]==lgmax)
{
sir[lgmax]=a[i];
lgmax--;
}
}
fprintf(fout,"%d\n",k);
for(i=1;i<=k;i++)
fprintf(fout,"%d ",sir[i]);
}
int cautare_binara()
{
int pozitie;
st=0; dr=k+1;
while(dr-st>1)
{
mij=st+(dr-st)/2;
if(a[i]<best[mij])
{
pozitie=mij;
dr=mij;
}
else
{
st=mij;
}
}
return pozitie;
}