Pila H y cola 6 del experimento de estructura de datos: el siguiente valor más grande (2)

Descripción

Para una secuencia que contenga n (1 <= n <= 100000) números enteros, para cada elemento de la secuencia, busque el primer valor mayor que su posición en la secuencia; si lo encuentra, genere el valor encontrado; de lo contrario, Salida -1.
Aporte

Hay varios grupos de entrada, la primera línea de entrada t (1 <= t <= 10), lo que significa el número de grupos de entrada;

Luego está la entrada de t grupos: cada grupo primero ingresa n, lo que significa el número de elementos en la secuencia de este grupo, y luego ingresa los n elementos de este grupo a su vez.
Producción

Hay varios grupos de salida y se genera una línea en blanco entre cada grupo (no hay después del último grupo);

Cada grupo de salida genera el elemento actual y su resultado de búsqueda línea por línea en el orden de los elementos en esta secuencia, con un -> intervalo entre los dos.
Muestra

Aporte

2
4 12 20 15 18
5 20 15 25 30 6
Salida

12–> 20
20 -> - 1
15–> 18
18 -> - 1

20–> 25
15–> 25
25–> 30
30 -> - 1
6 -> - 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int s[400001],a[400000],b[400000],c;
int main()
{
    
    
    int i,top,n,t,k;
    scanf("%d",&t);
    for(k=1; k<=t; k++)
    {
    
    
        memset(b,0,sizeof(b));
        memset(s,0,sizeof(s));
        memset(a,0,sizeof(a));
        scanf("%d",&n);
        for(i=1; i<=n; i++)
            scanf("%d",&a[i]);
        top=0;
        b[n]=-1;
        s[++top]=a[n];
        for(i=n-1; i>=1; i--)
        {
    
    
            if(a[i]<s[top])
            {
    
    
                b[i]=s[top];
                s[++top]=a[i];
            }
            else
            {
    
    
                while(a[i]>=s[top]&&top!=0)
                    top--;
                if(top==0)
                {
    
    
                    b[i]=-1;
                    s[++top]=a[i];

                }
                else
                {
    
    
                    b[i]=s[top];
                    s[++top]=a[i];
                }
            }
        }

        for(i=1; i<=n; i++)
            printf("%d-->%d\n",a[i],b[i]);
        if(k!=t) printf("\n");
    }

    return 0;
}

Supongo que te gusta

Origin blog.csdn.net/a675891/article/details/103957985
Recomendado
Clasificación