Теоретически в лучшем случае вам придется перебирать все 200 000 точек - и в худшем случае вам придется проверять все эти точки по всем 44 прямоугольникам (что вы и делаете сейчас) ).
Поскольку вы знаете, что вам придется проходить все 200 000 точек, лучшее, что вы можете сделать, это попытаться не проверять все 44 прямоугольника.
Чтобы сделать это, вам нужно будет выполнить некоторые вычисления для прямоугольников, вы найдете два ближайших прямоугольника и сформируете больший прямоугольник, который охватывает оба из них (кластер, если хотите). Затем вы найдете следующий ближайший прямоугольник к прямоугольнику, который вы только что сформировали, из другого кластерного прямоугольника. Вы продолжаете делать это, пока не заключите все прямоугольники (в итоге у вас будет 43 кластерных прямоугольника).
Теперь проведите цикл по точкам и проверьте по самому большому прямоугольнику, если точка попадает в этот прямоугольник, то вы проверяете следующий по величине прямоугольник, если он не попадает в этот прямоугольник, вам нужно только проверить, он попадает в прямоугольник, который был использован для формирования этого прямоугольника. Если он не попадает в этот прямоугольник, вы можете перейти к следующей точке, потому что эта точка не попадает ни в какие прямоугольники (и вы обнаружили это только с 3 проверками).