QOJ.ac

QOJ

実行時間制限: 1 s メモリ制限: 256 MB 満点: 100

#23832. Ordenamiento de burbuja

統計

Enunciado del problema

El ordenamiento de burbuja es uno de los algoritmos para ordenar una secuencia. Supongamos que queremos ordenar una secuencia $A$ de longitud $N$ en orden ascendente. El ordenamiento de burbuja intercambia las posiciones de $2$ números adyacentes si su relación de orden está invertida. Una pasada consiste en recorrer la secuencia de principio a fin e intercambiar esos $2$ números siempre que $A_i > A_{i+1}$ para $i = 1, 2, \dots, N - 1$ en este orden. Se sabe que al repetir esta pasada $N - 1$ veces se logra ordenar la secuencia en orden ascendente.

El número de intercambios mediante el ordenamiento de burbuja en una secuencia $A$ es la cantidad de veces que se intercambian enteros al aplicar el algoritmo anterior a la secuencia $A$. (Aunque los algoritmos e implementaciones conocidos como ordenamiento de burbuja pueden tener pequeñas diferencias en el orden de los bucles, los rangos y las condiciones de parada, se sabe que el número de intercambios de enteros al aplicarlos a la misma secuencia no varía debido a dichas diferencias).

Por ejemplo, el siguiente programa es una función escrita en lenguaje C que ordena un arreglo de enteros a de longitud n mediante el ordenamiento de burbuja.

void bubble_sort(int *a, int n) {
  int i, j;
  for (i = 0; i < n - 1; ++i) {
    for (j = 0; j < n - 1; ++j) {
      if (a[j] > a[j + 1]) {
        /* The following 3 lines correspond to 1 swap of integers */
        int x = a[j];
        a[j] = a[j + 1];
        a[j + 1] = x;
      }
    }
  }
}

Tarea

Se da una secuencia $A$ de longitud $N$. Supongamos que creamos una secuencia $A'$ intercambiando $2$ enteros en posiciones arbitrarias de la secuencia $A$ exactamente $1$ vez. Escribe un programa para encontrar el valor mínimo del número de intercambios mediante el ordenamiento de burbuja en la secuencia $A'$. (Ten en cuenta que los $2$ enteros que se intercambian inicialmente no tienen por qué ser adyacentes).

Restricciones

  • $1 \le N \le 100000$: la longitud de la secuencia $A$.
  • $1 \le A_i \le 1000000000$: el tamaño de los números incluidos en la secuencia $A$.

Entrada

Lee los siguientes datos desde la Entrada Estándar:

  • En la $1$-ª línea está escrito un entero $N$. $N$ representa la longitud de la secuencia $A$.
  • En la $i$-ésima línea ($1 \le i \le N$) de las siguientes $N$ líneas está escrito un entero $A_i$. Esto representa el $i$-ésimo entero de la secuencia $A$.

Salida

Imprime en la Salida Estándar, en $1$ línea, un entero que represente el número mínimo de intercambios mediante el ordenamiento de burbuja en la secuencia $A'$.

Criterios de calificación

  • Para el $10\%$ de la puntuación total, se cumple $N \le 1000$, y para cualesquiera $i, j$ ($1 \le i < j \le N$) se cumple $A_i \ne A_j$.
  • Para el $30\%$ de la puntuación total, se cumple $N \le 5000$, y para cualesquiera $i, j$ ($1 \le i < j \le N$) se cumple $A_i \ne A_j$.
  • Para el $80\%$ de la puntuación total, para cualesquiera $i, j$ ($1 \le i < j \le N$) se cumple $A_i \ne A_j$.

Ejemplo

Entrada de ejemplo 1

5
10
3
6
8
1

Salida de ejemplo 1

0

Si decidimos intercambiar el primer $10$ y el último $1$ de la secuencia $A$, la secuencia $A'$ queda ordenada, y el número de intercambios del ordenamiento de burbuja es $0$.


Entrada de ejemplo 2

5
3
1
7
9
5

Salida de ejemplo 2

2

Al intercambiar el $3$-er elemento $7$ y el último elemento $5$ de la secuencia $A$, la secuencia $A'$ pasa a ser $3, 1, 5, 9, 7$. El número de intercambios mediante el ordenamiento de burbuja en $A'$ es $2$.


Entrada de ejemplo 3

3
1
2
3

Salida de ejemplo 3

1

Incluso si la secuencia $A$ ya está ordenada desde el principio, es obligatorio realizar un intercambio al crear la secuencia $A'$.

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.