python-075Đọc toàn bộ đề miễn phí

Cây phân đoạn (Segment Tree) truy vấn khoảng và cập nhật điểm

Viết lớp SegmentTree:

PythonNâng cao35 phút

Tiến độ của tôi ở bài này

Điểm được lưu vào tài khoản sau khi chấm bài.

Đang tải điểm của bạn…

Kiến thức và chủ đề

segment treetreesrange queryalgorithms

Kiến thức tiên quyết: binary trees, recursion.

Nội dung đề bài

Mục tiêu kiến thức

  • Triển khai cây phân đoạn (Segment Tree) biểu diễn trên mảng 1D kích thước 4N.
  • Thực hiện truy vấn giá trị nhỏ nhất trong đoạn [L, R] (Range Minimum Query - RMQ) trong thời gian O(log N).
  • Thực hiện cập nhật giá trị tại một điểm (Point Update) trong thời gian O(log N).

Mô tả bài toán

Viết lớp SegmentTree:

  • __init__(self, nums: list[int]): Xây dựng cây phân đoạn từ mảng nums. Nếu nums rỗng, raise ValueError("Mang khong duoc rong").
  • query_min(self, left: int, right: int) -> int: Trả về giá trị nhỏ nhất trong đoạn chỉ số [left, right] (0-indexed, bao gồm cả hai đầu).
  • Nếu left > right hoặc left < 0 hoặc right ≥ len(nums), raise IndexError("Khoang truy van ngoai pham vi").
  • update(self, index: int, value: int) -> None: Cập nhật giá trị tại vị trí index thành value và cập nhật lại toàn bộ các nút cha liên quan trên cây.
  • Nếu index < 0 hoặc index >= len(nums), raise IndexError("Chi so ngoai pham vi").

Input

  • Tham số đầu vào cho hàm SegmentTree.

Output

  • Giá trị trả về của hàm SegmentTree theo đúng yêu cầu.

Ràng buộc

  • Thời gian chạy tối đa: 1000ms.
  • Giới hạn bộ nhớ: 256MB.
  • Dữ liệu đầu vào tuân thủ đúng kiểu dữ liệu và miền giá trị được mô tả.

Ví dụ 1

Input

SegmentTree()

Output

True

Giải thích

Hàm được gọi với các tham số mẫu trên và trả về kết quả chính xác theo yêu cầu.

3 cấp độ gợi ýMở dần khi bạn thật sự cần hỗ trợ.
Phân tích lời giảiGiải thích hướng tư duy và thuật toán.
Code tham khảoDùng để đối chiếu sau khi tự làm.

Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.