You are given an array representing a row of seats where seats[i] = 1 represents a person sitting in the ith seat, and seats[i] = 0 represents that the ith seat is empty (0-indexed).
There is at least one empty seat, and at least one person sitting.
Alex wants to sit in the seat such that the distance between him and the closest person to him is maximized. 
Return that maximum distance to the closest person.
 
Example 1:

Input: seats = [1,0,0,0,1,0,1]
Output: 2
Explanation: 
If Alex sits in the second open seat (i.e. seats[2]), then the closest person has distance 2.
If Alex sits in any other open seat, the closest person has distance 1.
Thus, the maximum distance to the closest person is 2.

Example 2:
Input: seats = [1,0,0,0]
Output: 3
Explanation: 
If Alex sits in the last seat (i.e. seats[3]), the closest person is 3 seats away.
This is the maximum distance possible, so the answer is 3.

Example 3:
Input: seats = [0,1]
Output: 1

 
Constraints:

2 <= seats.length <= 2 * 104
seats[i] is 0 or 1.
At least one seat is empty.
At least one seat is occupied.

```python

USER_FILENAME = "<user_code>"
import sys, json, builtins
import math, heapq, bisect, itertools, functools, collections, statistics, fractions, decimal, operator, array, random, re, string, os, pathlib
try:
    import resource as _res
except Exception:
    _res = None
from collections import Counter, defaultdict, deque, OrderedDict
from functools import lru_cache, reduce
from itertools import accumulate, permutations, combinations, product
from math import gcd, ceil, floor, sqrt
from decimal import Decimal
try:
    from typing import *
except Exception:
    pass
try:
    sys.setrecursionlimit(1_000_000)
except Exception:
    pass
try:
    import site as _site
    try:
        _sys_sites = _site.getsitepackages() if hasattr(_site, "getsitepackages") else []
        for _p in _sys_sites:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
    try:
        _usp = _site.getusersitepackages()
        if isinstance(_usp, str):
            _usp = [_usp]
        for _p in _usp:
            if _p and _p not in sys.path:
                sys.path.append(_p)
    except Exception:
        pass
except Exception:
    pass

def _disabled_input(*args, **kwargs):
    raise RuntimeError("input() is disabled in callable mode")
builtins.input = _disabled_input

ns = {"__name__": "__judge__"}  # prevent if __name__ == "__main__" blocks
for _k, _v in list(globals().items()):
    if not _k.startswith("_"):
        ns[_k] = _v
_CODE = "class Solution:\n    def maxDistToClosest(self, seats: List[int]) -> int:\n        # Goal is to maximize 0's on each side of i\n        # so first option that immediatly comes to mind is to run through the list\n        # checking every positon, and then its distance, saving the seat with the maximized distance\n        # This is really slow\n        # to speed it up, i can only check seats that are farther from most recent seat than best yet\n        # so in the first example\n        \n        # [1,0,0,0,1,0,1]\n        # 0 continue\n        # 1, check its 1 away, save its values\n        # 2 check its two away, save its values\n        # 3 its 3 away check its values, do not save\n        # 4 continue\n        # 5 1 is most recent continue\n        # 6 conitnue\n        \n        # still n^2 but faster than checking EVERY possibiliy\n        \n        # Go through once, saving the position of every person initially.\n        \n        # So here we just have to loop through and find the max difference between. Then return the mid value\n        # This algorithm is much faster\n        \n        # Edge case of best seat being on far right and far left\n        # first find distance of first person from beginning, then afyer \n        \n        # 0, 4, 6\n        # best = people[0]\n        # pos = 0\n        # distance = (people[i] - people[i-1])//2\n        # if distance > best:\n        #   best = distance\n        #   \n        # [0, 0, 1]\n        prev = -1\n        best = 0\n        for i in range(0, len(seats)):\n            if seats[i] == 1:\n                if prev == -1:\n                    distance = i\n                else:\n                    distance = (i - prev)//2\n                best = max(best, distance)\n                prev = i\n        best = max(best, len(seats) - prev-1)\n        \n#         best = people[0]\n        \n#         for i in range(1, len(people)):\n#             distance = (people[i] - people[i-1])//2\n#             best = max(best, distance)\n        \n#         best = max(best, len(seats) - people[-1]-1)\n        return best\n            \n"
_co = compile(_CODE, USER_FILENAME, "exec")
exec(_co, ns, ns)

_target = None
_fn_name = 'maxDistToClosest'
if _fn_name:
    if "Solution" in ns:
        try:
            _obj = ns["Solution"]()
            if hasattr(_obj, _fn_name):
                _target = getattr(_obj, _fn_name)
        except Exception:
            _target = None
    if _target is None and _fn_name in ns and callable(ns[_fn_name]):
        _target = ns[_fn_name]
# Fallback: if there's exactly one user-defined function, use it
if _target is None:
    _cands = [v for k, v in ns.items() if callable(v) and getattr(v, "__module__", "") in ("__judge__", "__main__")]
    _user_funcs = [c for c in _cands if getattr(c, "__name__", "").startswith("_") is False]
    if len(_user_funcs) == 1:
        _target = _user_funcs[0]
if _target is None:
    raise RuntimeError(f"Could not resolve callable '{_fn_name}'")

_raw = sys.stdin.read().strip()
if _raw:
    _parsed = json.loads(_raw)
    if isinstance(_parsed, dict):
        _kwargs = _parsed.get("kwargs", {})
        _args = _parsed.get("args", [])
    else:
        _args, _kwargs = _parsed, {}
else:
    _args, _kwargs = [], {}
if not isinstance(_args, (list, tuple)):
    _args = [_args]
_res = _target(*_args, **_kwargs)
try:
    sys.stdout.write(repr(_res) + "\n")
except Exception:
    pass

```

Measured memory_bytes: 5502