提出 #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))

提出情報

提出日時
問題 Ex - Linear Maximization
ユーザ Kiri8128
言語 PyPy3 (7.3.0)
得点 600
コード長 2555 Byte
結果 AC
実行時間 4336 ms
メモリ 304456 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 600 / 600
結果
AC × 2
AC × 29
セット名 テストケース
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