Buggy python submission (verdict: Time Limit Exceeded):
import numpy as np
mapping = {
    "R": (1, 0),
    "L": (-1, 0),
    "U": (0, 1),
    "D": (0, -1)
}

def f(x, vx, t):
    nx = x + vx * t
    return np.max(nx) - np.min(nx)

def solve(n, x, y, d):
    lb = 0
    ub = 10**10
    x = np.asarray(x, dtype=np.float)
    y = np.asarray(y, dtype=np.float)
    vx = np.zeros(n, dtype=np.float)
    vy = np.zeros(n, dtype=np.float)
    for i in range(n):
        vx[i], vy[i] = mapping[d[i]]
    h = lambda t: f(y, vy, t) * f(x, vx, t)
    while abs(ub-lb) > 1e-9:
        t1 = (2*lb + ub) / 3
        t2 = (lb + 2*ub) / 3
        if h(t1) < h(t2):
            ub = t2
        else:
            lb = t1
    return (h(t1) + h(t2)) / 2

n = int(input())
x, y, d = [-1]*n, [-1]*n, [-1]*n
for i in range(n):
    x[i], y[i], d[i] = input().split()
    x[i] = int(x[i])
    y[i] = int(y[i])
print(solve(n, x, y, d))

Fixed submission:
import numpy as np
from scipy.optimize import fmin

INF = 10**18

mapping = {
    "R": (1, 0),
    "L": (-1, 0),
    "U": (0, 1),
    "D": (0, -1)
}

def f(x, vx, t):
    if t < 0:
        return INF
    nx = x + vx * t
    return nx.max() - nx.min()

def solve(n, x, y, d):
    x = np.asarray(x, dtype=np.float)
    y = np.asarray(y, dtype=np.float)
    vx = np.zeros(n, dtype=np.float)
    vy = np.zeros(n, dtype=np.float)
    for i in range(n):
        vx[i], vy[i] = mapping[d[i]]
    h = lambda t: f(y, vy, t) * f(x, vx, t)
    t = fmin(h, x0=10**8, ftol=1e-9, disp=False)[0]
    return h(t)

n = int(input())
x, y, d = [-1]*n, [-1]*n, [-1]*n
for i in range(n):
    x[i], y[i], d[i] = input().split()
    x[i] = int(x[i])
    y[i] = int(y[i])
print(solve(n, x, y, d))

Buggy python submission (verdict: Time Limit Exceeded):
INF = 10**10

def f(x, sign, x_min, x_max, t): 
    x += sign * t 
    x_min = min(x_min, x)
    x_max = max(x_max, x)
    return x_min, x_max

def g(n, x, y, d, t): 
    x_min, x_max = max(x), min(x)
    y_min, y_max = max(y), min(y)
    for i in range(n):
        if d[i] == "R":
            x_sign = 1 
        elif d[i] == "L":
            x_sign = -1
        else:
            x_sign = 0 
        if d[i] == "U":
            y_sign = 1 
        elif d[i] == "D":
            y_sign = -1
        else:
            y_sign = 0 
        x_min, x_max = f(x[i], x_sign, x_min, x_max, t)
        y_min, y_max = f(y[i], y_sign, y_min, y_max, t)
    h = max(0, (y_max - y_min))
    w = max(0, (x_max - x_min))
    return h * w 

def solve(n, x, y, d): 
    lb = 0 
    ub = 10**10
    h = lambda t: g(n, x, y, d, t)
    while abs(ub-lb) > 1e-9:
        t1 = (2*lb + ub) / 3 
        t2 = (lb + 2*ub) / 3 
        if h(t1) < h(t2):
            ub = t2
        else:
            lb = t1
    return (h(t1) + h(t2)) / 2 

n = int(input())
x, y, d = [-1]*n, [-1]*n, [-1]*n
for i in range(n):
    x[i], y[i], d[i] = input().split()
    x[i] = int(x[i])
    y[i] = int(y[i])
print(solve(n, x, y, d)) 

Fixed submission:
import numpy as np
from scipy.optimize import fmin

INF = 10**18

mapping = {
    "R": (1, 0),
    "L": (-1, 0),
    "U": (0, 1),
    "D": (0, -1)
}

def f(x, vx, t):
    if t < 0:
        return INF
    nx = x + vx * t
    return nx.max() - nx.min()

def solve(n, x, y, d):
    x = np.asarray(x, dtype=np.float)
    y = np.asarray(y, dtype=np.float)
    vx = np.zeros(n, dtype=np.float)
    vy = np.zeros(n, dtype=np.float)
    for i in range(n):
        vx[i], vy[i] = mapping[d[i]]
    h = lambda t: f(y, vy, t) * f(x, vx, t)
    t = fmin(h, x0=10**8, ftol=1e-9, disp=False)[0]
    return h(t)

n = int(input())
x, y, d = [-1]*n, [-1]*n, [-1]*n
for i in range(n):
    x[i], y[i], d[i] = input().split()
    x[i] = int(x[i])
    y[i] = int(y[i])
print(solve(n, x, y, d))