提出 #30307939
ソースコード 拡げる
class LiChaoTree:
# Min Query
def __init__(self, X): # X: 調べる可能性のある x 座標のリスト
X = sorted(list(set(X)))
self.inf = 10 ** 50
self.n = 1 << (len(X) - 1).bit_length()
self.X = X + [self.inf] * (self.n - len(X))
self.D = {a: i for i, a in enumerate(X)}
self.lmr = [(0, 0, 0)] * self.n + [(x, x, x) for x in self.X]
for i in range(1, self.n)[::-1]:
self.lmr[i] = (self.lmr[i*2][0], self.lmr[i*2][2], self.lmr[i*2^1][2])
self.F = [None] * (self.n * 2)
def calc(self, f, x):
return f[0] * x + f[1]
def update(self, i, f):
while 1:
l, m, r = self.lmr[i]
fi = self.F[i]
if fi is None:
self.F[i] = f
return
cl = (fi[0] - f[0]) * l + fi[1] - f[1] > 0
cr = (fi[0] - f[0]) * r + fi[1] - f[1] > 0
if cl and cr:
self.F[i] = f
return
if not cl and not cr:
return
if (fi[0] - f[0]) * m + fi[1] - f[1] > 0:
self.F[i], f = f, fi
cl = not cl
if cl:
i *= 2
else:
i = i * 2 + 1
def query(self, x):
i = self.D[x] + self.n
mi = self.inf
while i > 0:
if self.F[i]:
mi = min(mi, self.calc(self.F[i], x))
i >>= 1
return mi
def add_line(self, a, b): # y = ax + b
f = (a, b)
self.update(1, f)
def debug(self):
print("F =", self.F)
print("X =", self.X)
print("D =", self.D)
print("lmr =", self.lmr)
Q = int(input())
X = set()
ma = -10 ** 20
mi = 10 ** 20
I = []
for _ in range(Q):
x, y, a, b = map(int, input().split())
if b:
c = (a * 10 ** 20 * 2 + b) // (2 * b)
I.append((x, y, a, b, c))
X.add(c)
else:
I.append((x, y, a, b, 0))
X = list(X)
lct1 = LiChaoTree(X)
lct2 = LiChaoTree(X)
for x, y, a, b, c in I:
ma = max(ma, x)
mi = min(mi, x)
lct1.add_line(-x, -y * 10 ** 20)
lct2.add_line(x, y * 10 ** 20)
if b > 0:
s = -lct1.query(c)
ans = (s * b * 2 + 10 ** 20) // (2 * 10 ** 20)
elif b < 0:
s = lct2.query(c)
ans = (s * b * 2 + 10 ** 20) // (2 * 10 ** 20)
else:
ans = max(ma * a, mi * a)
print(round(ans))
提出情報
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
600 / 600 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_01.txt, sample_02.txt |
| All |
circle_01.txt, circle_02.txt, circle_03.txt, circle_04.txt, dence_01.txt, dence_02.txt, large_01.txt, large_02.txt, line2_01.txt, line2_02.txt, line2_03.txt, line_01.txt, line_02.txt, line_03.txt, prec_01.txt, prec_02.txt, sample_01.txt, sample_02.txt, small_01.txt, small_02.txt, small_03.txt, small_04.txt, small_05.txt, small_06.txt, small_07.txt, small_08.txt, small_09.txt, small_10.txt, zero_01.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| circle_01.txt |
AC |
4113 ms |
303960 KiB |
| circle_02.txt |
AC |
4093 ms |
304304 KiB |
| circle_03.txt |
AC |
4096 ms |
304272 KiB |
| circle_04.txt |
AC |
4336 ms |
304456 KiB |
| dence_01.txt |
AC |
1917 ms |
280820 KiB |
| dence_02.txt |
AC |
1919 ms |
280688 KiB |
| large_01.txt |
AC |
2068 ms |
304288 KiB |
| large_02.txt |
AC |
2118 ms |
303860 KiB |
| line2_01.txt |
AC |
443 ms |
109952 KiB |
| line2_02.txt |
AC |
460 ms |
111384 KiB |
| line2_03.txt |
AC |
584 ms |
119376 KiB |
| line_01.txt |
AC |
1772 ms |
299228 KiB |
| line_02.txt |
AC |
2379 ms |
299184 KiB |
| line_03.txt |
AC |
3267 ms |
304284 KiB |
| prec_01.txt |
AC |
2132 ms |
303940 KiB |
| prec_02.txt |
AC |
2091 ms |
304264 KiB |
| sample_01.txt |
AC |
66 ms |
62616 KiB |
| sample_02.txt |
AC |
48 ms |
62764 KiB |
| small_01.txt |
AC |
46 ms |
62560 KiB |
| small_02.txt |
AC |
49 ms |
62620 KiB |
| small_03.txt |
AC |
49 ms |
62636 KiB |
| small_04.txt |
AC |
47 ms |
62580 KiB |
| small_05.txt |
AC |
54 ms |
62560 KiB |
| small_06.txt |
AC |
54 ms |
63456 KiB |
| small_07.txt |
AC |
59 ms |
68260 KiB |
| small_08.txt |
AC |
81 ms |
73776 KiB |
| small_09.txt |
AC |
111 ms |
75456 KiB |
| small_10.txt |
AC |
161 ms |
78556 KiB |
| zero_01.txt |
AC |
451 ms |
111044 KiB |