Pagini recente » Cod sursa (job #2466919) | Cod sursa (job #1255345) | Cod sursa (job #2361073) | Cod sursa (job #2024179) | Cod sursa (job #279839)
Cod sursa(job #279839)
#include <stdio.h>
#define NMAX 100000
typedef int sir[NMAX];
int n, i, j, max;
sir m, k;
FILE *in, *out;
void citeste ()
{
in = fopen("scmax.in", "r");
fscanf(in, "%d", &n);
for (i=0; i<n; i++)
{
fscanf(in,"%d", &m[i]);
}
fclose(in);
}
void calculeaza ()
{
k[n-1] = 1;
//parcurge sirul incepand de la capat
for (i=n-2; i>=0; i--)
{
//cauta un numar mai mare ca cel actual (cel din m[i])
for (j=i+1; j<n; j++)
{
//cand gaseste un nr mai mare se opreste
if (m[j] > m[i])
{
max = k[j] + 1;
k[i] = max;
break;
}
}
//verifica daca a gasit un numar mai mare
if (k[i] == 0)
{
k[i] = 1;
}
}
}
void sirul ()
{
out = fopen("scmax.out", "w");
fprintf(out, "%d \n", max);
max++;
for (i=0; i<n; i++)
{
if ((k[i] < max) && ((k[i]!=1) || (i==n-1)))
{
fprintf(out, "%d ", m[i]);
max--;
}
}
fclose(out);
}
int main ()
{
citeste();
calculeaza();
sirul();
return 0;
}