Cod sursa(job #1274082)
Utilizator | Data | 23 noiembrie 2014 11:56:05 | |
---|---|---|---|
Problema | Subsir crescator maximal | Scor | 65 |
Compilator | cpp | Status | done |
Runda | Arhiva educationala | Marime | 1.79 kb |
#include <stdio.h>
int main()
{
FILE *fin,*fout;
fin=fopen("scmax.in","r");
fout=fopen("scmax.out","w");
long int n,l,m,r;
bool flag;
fscanf(fin,"%ld",&n);
long int a[n],b[n+1],count=0;
for(int i=0;i<n;i++)
fscanf(fin,"%ld",&a[i]);
for(int i=0;i<=n;i++)
{
b[i]=2000000000;
}
for(int i=0;i<n;i++)
{
l=0;
r=n;
m=r/2;
flag=0;
while(r-l>1)
{
if(b[m]>a[i])
{
r=m;
m=(l+r)/2;
}
else if(b[m]<a[i])
{
l=m;
m=(l+r)/2;
}
else
{
flag=1;
break;
}
}
if(flag==0)
{
b[r]=a[i];
}
}
for(int i=0;i<=n;i++)
{
if(b[i]!=2000000000)
{
count++;
}
}
fprintf(fout,"%ld\n",count);
for(int i=0;i<=n;i++)
{
if(b[i]!=2000000000)
{
fprintf(fout,"%ld",b[i]);
if(i!=n)
{
fprintf(fout," ");
}
else
{
fprintf(fout,"\n");
}
}
}
}