You are ignoring the option of long sidings. They become less practical with higher speeds, but not impossible. The idea is to make the siding long enough that the trains can pass each other without slowing down. After the train passes the switch, it is thrown in the opposite direction for the oncoming train. To do this, you need to make the siding long enough for:
- time to throw the switch after the oncoming train has passed it, plus
- time to stop the train if the switch fails to throw, plus
- a reasonable amount of time for the oncoming train to be late.
There is also the time for the train to pass the switch, but given that the trains are likely only about 200m long, that is insignificant.
Using some back of the napkin math, you need about 1 minute to throw the switch, which at 177 km/h is 3km, maybe another 3 km for an emergency stop at 177 km/h, and assuming a margin of 5 minutes late for the oncoming train, another 15 km. That is a total of 21km. Given that at 177km/h a train can travel 88.5 km in 30 minutes, that is less than 1/4 of the ROW being long sidings, which is still a lot cheaper than double track and most of the time neither train needs to slow down.