Maintaining Maximum Social Distance
One idea would be to maintain a distance to the nearest seat, rather than simply an occupancy list (you can recover the same information since seats with zero distance are occupied). Then finding the seat with the furthest distance and updating the list reduces to:

finding the maximum element in the array
Traversing left and right from that element and updating the distances until the stored distance is already less than the distance to the newly added seat.

One more code review comment:
It may be nicer to either (1) template these functions on the parameter N, rather than declaring it at the beginning, so that they can be called later on a different sized array or (2) use std::vector so that the size of the seats container doesn't need to be known at compile time.