J'explique le deuxieme qui est le plus facile à suivre. Le premier fait grosso modo la même chose écrit différemment, le troisième j'ai la flemme
def main():
nbManteaux = int(input())
manteaux = [
(tuple(map(int,intervalle.split())),manteau)
for manteau,intervalle in zip(range(nbManteaux),stdin)]
manteaux = [(debut,-fin,manteau) for (debut,fin),manteau in manteaux]
On cree une liste de triplets (debut,-fin,manteau), où debut et fin sont les deux bornes de température, et "manteau" sert juste à numéroter les manteaux.
manteaux.sort()
On les trie par "début" croissant. Note qu'en cas d'égalité, le tri regarde ensuite la deuxième composante, et trie par "fin" décroissante.
parDebut = [None]*nbManteaux
for position,(_,_,manteau) in enumerate(manteaux):
parDebut[manteau] = position
On associe à chaque manteau sa position dans le tableau trié par (début, -fin).
Si le manteau est en position k, ça veut dire que les k manteaux situés avant lui ne sont pas compris dans son intervalle (car leur début est plus petit).
manteaux.sort(key=itemgetter(1,0,2))
parFin = [None]*nbManteaux
for position,(_,_,manteau) in enumerate(manteaux):
parFin[manteau] = position
Cette fois on trie en fonction du couple (-fin, debut), par ordre lexicographique. Du coup on les trie par "fin" décroissante, et en cas d'égalité, par début croissant.
Là encore la position indique combien de manteaux le sont pas compris dans son intervalle (car leur fin est plus grande)
INFINI = 1000*1000*1000
sommePosMin = INFINI
for posDebut,posFin in zip(parDebut,parFin):
sommePosMin = min(sommePosMin,posDebut+posFin)
print(nbManteaux-1-sommePosMin)
Pour chaque manteau on fait la somme des deux positions et ça nous dit combien de manteaux ne sont pas dans son intervalle. On cherche donc le manteau pour lequel la somme des deux positions est minimale.
Le seul hic c'est qu'on risque de compter un manteau en double: s'il était situé avant dans le premier tri et dans le deuxieme tri. Mais ça veut dire que son début est plus petit, et que sa fin est plus grande, on est contenu dans son intervalle et il aura une SommePos encore plus petite.