Cod sursa(job #3284885)

Utilizator David_RadavoiRadavoi David Alexandru David_Radavoi Data 12 martie 2025 12:01:42
Problema Secv Scor 80
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.87 kb
#include <stdio.h>
#include <stdlib.h>

#define MAXN 5000

int v[MAXN + 1];
int alt[MAXN + 1];
int d[MAXN + 1];
int st[MAXN + 1];

int sortare(int N)
{
    int u, p, i, aux;
    for (u = N; u > 1; u--)
    {
        p = 1;
        for (i = 2; i <= u; i++)
        {
            if (alt[p] < alt[i])
            {
                p = i;
            }
        }
        aux = alt[p];
        alt[p] = alt[u];
        alt[u] = aux;
    }
}

int main()
{
    FILE *fin, *fout;
    fin = fopen("secv.in", "r");
    fout = fopen("secv.out", "w");
    int N, i, j, o = 1, maxi, rez = -1;
    fscanf(fin, "%d", &N);
    for (i = 1; i <= N; i++)
    {
        fscanf(fin, "%d", &v[i]);
        alt[i] = v[i];
    }
    sortare(N);
    i = 1;
    while (i < N)
    {
        if (alt[i] != alt[i + 1])
        {
            o++;
        }
        i++;
    }
    printf("%d", o);
    for (i = 1; i <= N; i++)
    {
        j = i - 1;
        maxi = 0;
        while (j > 0)
        {
            if (v[j] < v[i])
            {
                if (maxi == 0)
                {
                    maxi = j;
                }
                else if (d[maxi] < d[j])
                {
                    maxi = j;
                }
            }
            j--;
        }
        if (maxi == 0)
        {
            st[i] = i;
            d[i] = 1;
        }
        else
        {
            d[i] = d[maxi] + 1;
            st[i] = st[maxi];
        }
    }
    for (i = 1; i <= N; i++)
    {
        if (d[i] == o)
        {
            if (rez == -1)
            {
                rez = i - st[i] + 1;
            }
            else if (rez > i - st[i] + 1)
            {
                rez = i - st[i] + 1;
            }
        }
    }
    fprintf(fout, "%d", rez);
    fclose(fin);
    fclose(fout);
    return 0;
}