W kwestii buforowanie wejścia i wyjścia, to sugerowałbym jeszcze wyłączyć powiązanie pomiędzy std::cin
i std::cout
przy pomocy std::cin.tie(nullptr)
(bez tego operacje na cin
powodują czyszczenie bufora cout
).
W powyższym rozwiązaniu jest kilka zbędnych elementów które aż czterokrotnie zwiększają zużycie pamięci. Tylko jedna z zadeklarowanych tablic jest używana w rozwiązaniu. Dodatkowo tablica ta przechowuje strukturę w której używane jest tylko jedno z trzech pól.
Jeśli chodzi o same struktury danych, to drzewo Fenwicka byłoby tu nieco szybsze niż drzewo przedziałowe.