Pagini recente » Cod sursa (job #2460471) | Cod sursa (job #2490154) | Cod sursa (job #1910234) | Cod sursa (job #3235452) | Cod sursa (job #1429365)
#include <stdio.h>
using namespace std;
FILE *fin=fopen("scmax.in" ,"r");
FILE *fout=fopen("scmax.out" ,"w");
int v[100001] , a[100001] ,mic[100001] ,pred[100001] ,nr;
int cb(int y)
{
int pas=1<<16;
int j=0;
while(pas != 0)
{
if(j+pas <= nr && v[mic[j+pas]]<y) j+=pas;
pas/=2;
}
return j;
}
int main()
{
int x ,n ,i ,j;
fscanf(fin ,"%d" ,&n);
for(i=1;i<=n;i++)
{
fscanf(fin ,"%d" , &v[i]);
}
nr=0;
mic[++nr]=1;
for(i=2;i<=n;i++)
{
j=cb(v[i]);
pred[i]=mic[j];
mic[j+1]=i;
if(j==nr) nr++;
}
a[1]=v[mic[nr]];
x=mic[nr];
int poz=1;
while(pred[x]!=0)
{
poz++;
a[poz]=v[pred[x]];
x=pred[x];
}
fprintf(fout ,"%d\n" ,nr);
for(i=nr;i>=1;i--)
{
fprintf(fout ,"%d " ,a[i]);
}
return 0;
}