Pagini recente » Cod sursa (job #1268429) | Cod sursa (job #1452961) | Cod sursa (job #538486) | Clasament simulare1_martie | Cod sursa (job #1429368)
#include <stdio.h>
using namespace std;
#define MAX 100001
FILE *fin, *fout;
int v[MAX], mic[MAX], pred[MAX], n, nr;
int sol[MAX], top;
int cb(int x)
{
int i = 0, pas = 1 << 20;
while(pas > 0)
{
if(i + pas <= nr)
if(v[mic[i + pas]] < x)
i += pas;
pas >>= 1;
}
return i;
}
void subsir(int i)
{
if(pred[i]!=0)
subsir(pred[i]);
fprintf(fout,"%d ",v[i]);
}
int main()
{
fin = fopen ("scmax.in", "r");
fout = fopen ("scmax.out", "w");
int j;
fscanf(fin, "%d", &n);
for(int i = 1; i <= n ; i++)
{
fscanf(fin, "%d", &v[i]);
}
nr = 0;
mic[++nr] = 1;
for(int i = 2; i <= n; i++)
{
j = cb(v[i]);
pred[i] = mic[j];
mic[j + 1] = i;
if(j == nr)
nr++;
}
fprintf(fout, "%d\n", nr);
subsir(mic[nr]);
return 0;
}