Pagini recente » Cod sursa (job #734342) | Cod sursa (job #448553) | Cod sursa (job #2466821) | Cod sursa (job #968466) | Cod sursa (job #864351)
Cod sursa(job #864351)
#include <stdio.h>
using namespace std;
FILE *f=fopen("scmax.in","r");
FILE *g=fopen("scmax.out","w");
int n,i,v[100001],s[100001],nr,b[100001],poz,maxi,o,h,l;
int caut(int x)
{
int p,m,u,mx;
mx=0;
p=1;
u=b[0];
while (p<=u)
{
m=(p+u)/2;
if(b[m]<x)
{
if(m>mx)mx=m;
p=m+1;
}
else u=m-1;
}
return mx;
}
int main()
{
fscanf(f,"%d",&n);
for(i=1;i<=n;i++)
fscanf(f,"%d",&v[i]);
b[1]=v[1];
b[0]=1;
for(i=2;i<=n;i++)
{
poz=caut(v[i]);
if (poz==b[0])
{
b[0]++;
b[poz+1]=v[i];
}
else b[poz+1]=v[i];
s[i]=poz+1;
}
maxi=0;
o=0;
for(i=1;i<=n;i++)
if (maxi<s[i]){maxi=s[i];o=i;}
fprintf(g,"%d\n",maxi);
h=o;
l=0;
while(maxi>0)
{
l++;
b[l]=v[h];
maxi--;
while(s[h]!=maxi && h>0)h--;
}
for(i=l;i>=1;i--)
fprintf(g,"%d ",b[i]);
fclose(g);
return 0;
}