Mam tylko nadzieję, że to nie ja - może kiedyś coś na ten temat napisałem?
Używanie pair zamiast odpowiedniej struktury, na pewno powoduje, że program jest dużo mniej czytelny, ale jest co najmniej jeden powód używania pair i zagnieżdzonych
pair<pair<> >.
Dzięki nim [pair ...], możemy użyć sortowania z STL [sort(....begin(), ..,.end())] bez pisania własnej funkcji porównującej.
W dyskutowanym programie jednak to niestety nie występuje.