canuc80k1701·2/50

Mức Nhỏ Nhất Và Số Lần

Nộp bài trên LQDOJ

Bài 17 · Segment Tree

Cho một mảng gồm phần tử, đánh số từ đến . Bạn cần xử lý hai loại thao tác theo đúng thứ tự xuất hiện:

  • : thay bằng ;
  • : xét đoạn nửa mở , tức là các vị trí . Hãy tìm giá trị nhỏ nhất trong đoạn và số vị trí mang giá trị ấy.

Input

  • Dòng đầu chứa hai số nguyên và - số phần tử và số thao tác.
  • Dòng thứ hai chứa số nguyên .
  • Mỗi dòng trong dòng tiếp theo có dạng hoặc .

Output

  • Với mỗi thao tác loại , in hai số trên một dòng: giá trị nhỏ nhất trong và số lần giá trị đó xuất hiện trong đoạn.

Constraints

  • .
  • .
  • Với thao tác loại : .
  • Với thao tác loại : .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

5 5
4 1 1 3 2
2 0 5
1 2 5
2 0 3
1 0 1
2 0 4

Output

1 2
1 1
1 2

Giải thích: Truy vấn đầu thấy giá trị nhỏ nhất ở hai vị trí. Sau các phép gán, số lần xuất hiện của giá trị nhỏ nhất trong hai đoạn tiếp theo lần lượt là và .

Lời giải tóm tắt
  • Phân tích: Chỉ biết minimum của một đoạn là chưa đủ, vì đề còn hỏi số lần minimum xuất hiện. Mỗi node của cây đoạn vì thế lưu cặp (mn, cnt): mn là giá trị nhỏ nhất và cnt là số phần tử bằng mn trong đoạn của node.
  • Phân tích: Khi gộp hai node, nếu hai minimum khác nhau thì toàn bộ đáp án đến từ phía có minimum nhỏ hơn. Nếu chúng bằng nhau, minimum chung giữ nguyên và hai tần suất được cộng lại. Node rỗng dùng cặp (vô cùng, 0).
  • Thuật toán: Xây cây từ các lá (a_i,1).
  • Thuật toán: Cập nhật điểm thay lá bằng (v,1) rồi gộp lại các tổ tiên.
  • Thuật toán: Truy vấn [l,r) bằng cách gộp các node phủ đúng đoạn ấy.
  • Chứng minh tính đúng đắn: Ở mỗi lá, cặp lưu trữ hiển nhiên đúng. Giả sử hai node con đúng. Nếu minimum của chúng khác nhau, không phần tử ở phía có minimum lớn hơn có thể là minimum của đoạn cha; nếu bằng nhau, mọi lần xuất hiện ở cả hai phía đều phải được tính. Do đó phép gộp tạo đúng cặp cho node cha.
  • Chứng minh tính đúng đắn: Cập nhật duy trì bất biến trên đường từ lá tới gốc. Các node dùng trong truy vấn phân hoạch chính xác [l,r), nên gộp chúng cho đúng minimum và đúng tổng tần suất của minimum. Vì vậy thuật toán luôn in kết quả đúng.
  • Độ phức tạp: Xây cây O(n), mỗi thao tác O(log n), bộ nhớ O(n).