Pagini recente » Cod sursa (job #2979402) | Cod sursa (job #2483248) | Cod sursa (job #3212692) | Cod sursa (job #912306) | Cod sursa (job #840461)
Cod sursa(job #840461)
/**
* Sa se determine un subsir al lui a care este ordonat strict crescator si care are lungimea maxima.
* Restrictii:
* 1 ≤ N ≤ 100 000
* 1 ≤ ai ≤ 2 000 000 000, pentru orice i de la 1 la N
*/
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#define MAX 100000
int main()
{
int n;
FILE* in = fopen("scmax.in", "r");
fscanf(in, "%d", &n);
int v[n], max[n], next[n];
for (int i = 0; i<n; i++)
{
fscanf(in, "%d", &v[i]);
max[i] = 1;
}
fclose(in);
int cmax, ind;
for (int i = n-1; i>=0; i--)
{
cmax = 0; ind = -1;
for (int j = i+1; j<n; j++)
{
if (v[i] < v[j] && max[j] > cmax)
{
cmax = max[j];
ind = j;
}
}
max[i] += cmax;
next[i] = ind;
}
cmax = max[0]; ind = 0;
for (int i = 1; i<n; i++)
if (max[i] > cmax) {
cmax = max[i];
ind = i;
}
FILE* out = fopen("scmax.out", "w");
fprintf(out, "%d\n", cmax);
while (ind != -1)
{
fprintf(out, "%d ", v[ind]);
ind = next[ind];
}
fclose(out);
return 0;
}