Pagini recente » Istoria paginii utilizator/valeria | Cod sursa (job #1580940) | Istoria paginii utilizator/serbanmb | Cod sursa (job #96579) | Cod sursa (job #1274076)
#include <stdio.h>
#include <algorithm>
FILE *fin, *fout;
int n, *p, *min;
const int NMAX = 2000000002;
int main()
{
fin = fopen("scmax.in", "r");
fout = fopen("scmax.out", "w");
fscanf(fin, "%d", &n);
p = new int[n];
for(int i =0; i< n; i++) fscanf(fin, "%d", &p[i]);
min = new int[n+1];
for(int i =1; i< n+1; i++) min[i] = NMAX;
min[0] = 0;
for(int i = 0; i< n; i++)
{
int k = std::lower_bound(min, min+n+1, p[i]) - min;
if(p[i] < min[k]) min[k] = p[i];
p[i] = k;
}
fprintf(fout, "%d\n", p[n-1]);
for(int i =1; min[i]!= NMAX; i++) fprintf(fout, "%d ", min[i]);
fprintf(fout, "\n");
fclose(fin);
fclose(fout);
return 0;
}