Nous avons un tableau composé de chaque entrée sous la forme d'un tuple de deux nombres entiers. Laissez le tableau être A = [(a1, b1), (a2, b2), .... , (an, bn)]
. Maintenant, nous avons plusieurs requêtes où nous avons donné un nombre entier x
, nous devons trouver la valeur maximale de ai + |x - bi| for 1 <= i <= n
.Recherche du maximum de l'élément différence + pour un tableau
Je comprends que cela peut être facilement réalisé en O(n)
complexité de temps pour chaque requête, mais je cherche quelque chose de plus rapide que cela, probablement O(log n)
pour chaque requête. Je peux pré-traiter le tableau en O(n)
, mais les requêtes doivent être effectuées plus rapidement que O(n)
.
Toute sorte d'aide serait appréciée.
essayer de voir le problème de l'autre côté: pour l'ensemble donné de paires, les paires avec 'ai + | x - bi | 'plus grand que tous les autres pour' x' plus grand que tout 'bi' sont ceux avec le maximum' ai - bi'. Quelle est la prochaine région plus petite? – greybeard
@greybeard Donc il y a deux cas possibles. 'x> bi' et' x
@greybeard aussi ce que je peux faire pour prétraiter est de trier le tableau par b de sorte que x nous pouvons trouver la frontière pour x rapidement par recherche binaire et ensuite garder les arbres de segment avec les valeurs susmentionnées pour trouver le maximum de ces deux segments en sous-ligne temps. Je pense que cela devrait fonctionner. –