Pagini recente » Cod sursa (job #2306143) | Cod sursa (job #815606) | Cod sursa (job #499687) | Cod sursa (job #1901758) | Cod sursa (job #886697)
Cod sursa(job #886697)
#include <cstdio>
#define NMAX 100001
using namespace std;
FILE *fin, *fout;
int n, a[NMAX], poz[NMAX], best[NMAX], b[NMAX], ct;
int caut (int p, int u, int val) {
int m, bun, gasit=0;
while (p<=u) {
m=(p+u)/2;
if (best[m]>=val) { u=m-1; bun=m; gasit=1; }
else p=m+1;
}
if (gasit) return bun;
return -1;
}
int main()
{
int i, lgb=0, mmic;
fin=fopen("scmax.in", "r"); fout=fopen("scmax.out", "w");
fscanf (fin, "%d", &n); for (i=1; i<=n; ++i) {
fscanf (fin, "%d", &a[i]);
mmic=caut (1, lgb, a[i]);
if (mmic==-1) { best[++lgb]=a[i]; poz[i]=lgb; }
else { best[mmic]=a[i]; poz[i]=mmic; }
}
fprintf (fout, "%d\n", lgb);
for (i=n; i>=1 && lgb; --i)
if (poz[i]==lgb) {
b[++ct]=a[i];
--lgb;
}
for (i=ct; i>=1; --i) fprintf (fout, "%d ", b[i]); fprintf (fout, "\n");
fclose(fin); fclose (fout);
return 0;
}