Pagini recente » Cod sursa (job #886148) | Cod sursa (job #2428398) | Cod sursa (job #2248714) | Cod sursa (job #236369) | Cod sursa (job #1096646)
#include <cstdio>
#define Nmax 100005
using namespace std;
FILE *fi = fopen("scmax.in", "r");
FILE *fo = fopen("scmax.out", "w");
int v[Nmax];
int bst[Nmax];
int t[Nmax];
int n;
int mx = (1<<31);
int pmx = 0;
void afisare(int x)
{
if (t[x]) afisare(t[x]);
fprintf(fo, "%d ", v[x]);
}
int main()
{
fscanf(fi, "%d", &n);
for (int i = 1; i <= n; i++)
fscanf(fi, "%d", &v[i]);
bst[1] = 1;
t[1] = 0;
for (int i = 2; i <= n; i++)
{
int mx2 = 0;
int pmx2 = 0;
for (int j = i-1; j; j--)
{
if (mx2 < bst[j] && v[j] < v[i])
{
mx2 = bst[j];
pmx2 = j;
}
}
bst[i] = mx2 + 1;
t[i] = pmx2;
if (bst[i] > mx)
{
mx = bst[i];
pmx = i;
}
}
fprintf(fo, "%d\n", mx);
afisare(pmx);
return 0;
}