cola de prioridad STL

Entrenamiento 2 - Denominación C

Se le da un conjunto de n números enteros a0, a1, ..., an - 1. Encontrar la distancia entre dos mínimos más cercanos (el más cercano) en el mismo. Se garantiza que en la matriz se produce un mínimo de al menos dos veces.

Entrada

La primera línea contiene entero positivo n (2 ≤ n ≤ 105) - tamaño de la matriz dada. La segunda línea contiene n enteros a0, a1, ..., an - 1 (1 ≤ ai ≤ 109) - elementos de la matriz. Se garantiza que en la matriz se produce un mínimo de al menos dos veces.

Salida

Imprimir el único número - distancia entre dos mínimos cercanos de la matriz.

Ejemplos

Entrada

2
3 3

Salida

1

Entrada

3
5 6 5

Salida

2

Entrada

9
2 1 3 5 4 1 2 3 1

Salida

3

#pragma warning (disable:4996)
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <vector>
#include <queue>
#define inf 0X7f7f7f7f
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int maxn = 1e5 + 5;

struct Node
{
	int val;
	int pos;
	friend bool operator<(Node a, Node b)
	{
		if (a.val == b.val)
			return a.pos > b.pos;
		return a.val > b.val;
	}
};
priority_queue<Node> a;

int main()
{
	int n;
	scanf("%d", &n);
	int num = 0;
	int ans = inf;
	for (int i = 0; i < n; i++)
	{
		int val;
		scanf("%d", &val);
		Node t;
		t.val = val;
		t.pos = i;
		a.push(t);
	}

	num = a.top().val;
	int lastpos = a.top().pos;
	a.pop();
	while (a.size() != 0 && a.top().val == num)
	{
		ans = min(ans, a.top().pos - lastpos);
		lastpos = a.top().pos;
		a.pop();
	}
	printf("%d\n", ans);
	return 0;
}

Ideas:
una cola de prioridad almacenar el valor mínimo se obtiene de la respuesta actual y actualizada.

Publicado 28 artículos originales · ganado elogios 0 · Vistas 338

Supongo que te gusta

Origin blog.csdn.net/xukeke12138/article/details/104578927
Recomendado
Clasificación