thảo luận Leetcode contest, đường tới Guardian

  • Người tạo chủ đề Người tạo chủ đề freedom.9
  • Ngày bắt đầu Ngày bắt đầu
Trạng thái
Không mở để trả lời thêm.
Đm bài 2 bị ngu tự dưng đi dùng binary search tốn thời gian vl :beat_brick:
Thi thố mà suy nghĩ đúng phức tạp, cay thật. Xài mẹ cái dict là đc rồi ngồi làm binary search lol
 
Bài 3 em ko để ý limit <= 10^9, cứ đinh ninh limit <= 10^5 như n. Thảo nào dùng mảng để lưu màu của bóng cứ bị TLE. Thành ra ngồi cải tiến solution mất hơn chục lần vẫn ko được.
1716653390482.png
 
Bài 3 em ko để ý limit <= 10^9, cứ đinh ninh limit <= 10^5 như n. Thảo nào dùng mảng để lưu màu của bóng cứ bị TLE. Thành ra ngồi cải tiến solution mất hơn chục lần vẫn ko được. Xem tệp đính kèm 2512022
Chắc fence rating tầm 1k5 đến 1k6, thi thêm chục cái contest nữa là quen thôi fence.
Kinh nghiệm là đọc đề, hiểu đề, đọc constrain mới đi tìm optimal solution cho cái constrain đó.
Nhiều bài chỉ cần đọc constrain là sẽ tìm được hướng giải luôn.
 
các fen trong đây làm nhanh khiếp, mình làm 3 câu gần 40', nhìn câu 4 thấy chưa được trăm mạng làm xong là bỏ đi xem bóng đá luôn.
 
Chắc fence rating tầm 1k5 đến 1k6, thi thêm chục cái contest nữa là quen thôi fence.
Kinh nghiệm là đọc đề, hiểu đề, đọc constrain mới đi tìm optimal solution cho cái constrain đó.
Nhiều bài chỉ cần đọc constrain là sẽ tìm được hướng giải luôn.
Em mới lên rank Knight ấy bác, thấy đường tới Guardian mịt mờ quá
1716657434849.png
 
3Q 12 phút,
Q4 nhìn tưởng ngon ăn, cài segment cả buổi không xong :too_sad:
Python:
from copy import copy

class Node:
    def __init__(self, lo=-1, hi=-1):
        self.lo = lo
        self.hi = hi
        self.leftObstacle = None
        self.rightObstacle = None
        self.largestRange = hi - lo


class SegmentTree:
    def __init__(self, n):
        self.n = n
        self.nodes = 4 * n * [None]
        self.buildTree(0, 0, self.n - 1)

    def buildTree(self, root, lo, hi):
        if lo == hi:
            self.nodes[root] = Node(lo, hi)
            return

        mid = (lo + hi) // 2
        self.buildTree(root * 2 + 1, lo, mid)
        self.buildTree(root * 2 + 2, mid + 1, hi)
        self.nodes[root] = self.mergeResult(self.nodes[2 * root + 1], self.nodes[2 * root + 2])

    def mergeResult(self, leftNode, rightNode):
        if not leftNode:
            return copy(rightNode)
        if not rightNode:
            return copy(leftNode)

        node = Node(leftNode.lo, rightNode.hi)
        node.leftObstacle = leftNode.leftObstacle if leftNode.leftObstacle != None else rightNode.leftObstacle
        node.rightObstacle = rightNode.rightObstacle if rightNode.rightObstacle != None else leftNode.rightObstacle

        midLeft = leftNode.rightObstacle if leftNode.rightObstacle != None else leftNode.lo
        midRight = rightNode.leftObstacle if rightNode.leftObstacle != None else rightNode.hi
        node.largestRange = max(leftNode.largestRange, rightNode.largestRange, midRight - midLeft)
        
        return node

    def query(self, qStart, qEnd, root=0, lo=0, hi=-1):
        if hi == -1:
            hi = self.n - 1
        if qStart <= lo <= hi <= qEnd:
            return self.nodes[root]

        if hi < qStart or lo > qEnd:
            return None

        mid = (lo + hi) // 2

        result = self.mergeResult(self.query(qStart, qEnd, 2 * root + 1, lo, mid),
                                  self.query(qStart, qEnd, 2 * root + 2, mid + 1, hi))

        return result

    def update(self, index, root=0, lo=0, hi=-1):
        if hi == -1:
            hi = self.n - 1

        if lo == hi:
            node = self.nodes[root]
            node.leftObstacle = node.rightObstacle = index
            node.largestRange = 0
            return

        mid = (lo + hi) // 2
        if index <= mid:
            self.update(index, 2 * root + 1, lo, mid)
        else:
            self.update(index, 2 * root + 2, mid + 1, hi)

        self.nodes[root] = self.mergeResult(self.nodes[2 * root + 1], self.nodes[2 * root + 2])


class Solution:
    def getResults(self, queries: List[List[int]]) -> List[bool]:
        ans = []
        segTree = SegmentTree(max(q[1] for q in queries) + 1)
        for q in queries:
            if q[0] == 1:
                segTree.update(q[1])
            else:
                x, sz = q[1], q[2]
                maxSize = segTree.query(0, x).largestRange
                ans.append(maxSize >= sz)

        return ans

Anyway, em cài khá phức tạp. Thấy tụi nó viết concise hơn nhiều
 
Sửa lần cuối:
Trạng thái
Không mở để trả lời thêm.

Thống kê chủ đề

Ngày tạo
freedom.9,
Người trả lời cuối
freedom.9,
Trả lời
2.480
Lượt xem
130.354
Quay lại
Lên đầu trang