Pagini recente » Cod sursa (job #2200405) | Cod sursa (job #2653518) | Cod sursa (job #2446402) | Cod sursa (job #3231033) | Cod sursa (job #799461)
Cod sursa(job #799461)
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 100000
int scmax(int *v, int n, int *poz)
{
int i, j, best[MAX], max, last_seq_len = 1, last_seq_index = 0, best_seq_index = 0;
best[0] = 1;
for (i = 1; i < n; i++)
{
if (v[i] < v[i-1])
{ /* elementele sunt in ordine incorecta --> actualizez lungimea maxima crescatoare */
best[i] = best[i-1];
last_seq_len = 1;
last_seq_index = i;
}
else
{ /* elementele sunt in ordinea buna --> calculez cel mai lung subsir crescator pana acum */
last_seq_len++;
for (j = last_seq_index, max = 0; j < i; j++)
if (max < best[j])
max = best[j];
if (max < last_seq_len) { best[i] = last_seq_len; best_seq_index = last_seq_index; } else best[i] = max;
}
}
for (i = 0; i < n; i++)
printf("%3i", best[i]);
printf("\n");
for (i = best_seq_index; i < best[n-1] + best_seq_index; i++)
printf("%3i", v[i]);
printf("\n");
return max;
}
int main()
{
FILE *f, *g;
int n, v[MAX], i, max, p;
f = fopen("scmax.in", "r");
fscanf(f, "%i", &n);
for (i = 0; i < n; ++i)
fscanf(f, "%i", v+i);
// for (i = 0; i < n; i++)
// printf("v[%i] = %i\n", i, v[i]);
g = fopen("scmax.out", "w");
max = scmax(v, n, &p);
// fprintf(g, "%i\n", max);
// for (i = p - max + 1; max > 0; i++, max--)
// fprintf(g, "%i ", v[i]);
getch();
return 0;
}