Pagini recente » Cod sursa (job #1233690) | Cod sursa (job #1947858) | Cod sursa (job #923589) | Cod sursa (job #1819960) | Cod sursa (job #1244282)
#include <stdio.h>
FILE*f=fopen("scmax.in","r"),*g=fopen("scmax.out","w");
long n, v[100003],d[10003],l[10003],nr;
using namespace std;
void citire()
{
fscanf(f,"%ld",&n);
for(long i=1;i<=n;i++)
{
fscanf(f,"%ld",&v[i]);
}
fclose(f);
}
void inserare(long x)
{
long p=1,u=nr,mij;
while(p<=u)
{
mij=(p+u)/2;
if(v[x]>v[d[mij]])
p=mij+1;
else
u=mij-1;
}
if(v[x]<v[d[p]])
{
l[x]=d[p-1];
d[p]=x;
}
}
void afisare(long i)
{
if(i==0) return;
afisare(l[i]);
fprintf(g,"%ld ",v[i]);
}
void crescator()
{
d[1]=1;
nr=1;
for(long i=2;i<=n;i++)
{
if(v[i]>v[d[nr]])
{
nr++;
d[nr]=i;
l[i]=d[nr-1];
}
else
inserare(i);
}
fprintf(g,"%ld\n",nr);
afisare(d[nr]);
}
int main()
{
citire();
crescator();
return 0;
}