STL fila de prioridade

Formação 2 - título C

Você é dado um conjunto de n inteiro números a0, a1, ..., an - 1. Encontre a distância entre dois mínimos (mais próxima) mais próximos na mesma. É garantido que na matriz um mínimo ocorre pelo menos duas vezes.

Entrada

A primeira linha contém inteiro positivo n (2 ≤ n ≤ 105) - tamanho da matriz dada. A segunda linha contém n inteiros a0, a1, ..., An - 1 (1 ≤ ai ≤ 109) - elementos da matriz. É garantido que na matriz um mínimo ocorre pelo menos duas vezes.

Resultado

Imprimir o único número - distância entre dois mínimos mais próximos na matriz.

Exemplos

Entrada

2
3 3

Resultado

1

Entrada

3
5 6 5

Resultado

2

Entrada

9
2 1 3 4 5 1 2 3 1

Resultado

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;
}

Ideias:
uma fila de prioridade armazenar o valor mínimo é obtido a partir da resposta atual e atualizado.

Publicado 28 artigos originais · ganhou elogios 0 · Visualizações 338

Acho que você gosta

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