canuc80k5801·2/50

Giá Trị Lớn Nhất Trên Đường

Nộp bài trên LQDOJ

Bài 58 · Heavy Light Decomposition

Cho một cây đỉnh đánh số . Đỉnh có giá trị nguyên . Xử lý thao tác theo thứ tự:

  • : gán giá trị tại đỉnh bằng ;
  • : tìm giá trị lớn nhất trên đường đơn từ đến , kể cả hai đầu.

Input

  • Dòng đầu chứa ; dòng hai chứa giá trị. Tiếp theo là cạnh, rồi dòng thao tác.

Output

  • In kết quả của mỗi thao tác loại trên một dòng.

Constraints

  • .
  • ; .
  • Các cạnh tạo thành một cây vô hướng.

Scoring

  • Subtask (): . Subtask (): không có giới hạn bổ sung.

Example

Test 1

Input

5 6
4 2 7 1 5
1 2
1 3
3 4
3 5
2 2 4
1 3 1
2 2 4
1 4 9
2 4 5
2 1 1

Output

7
4
9
4

Giải thích: Đường ban đầu có cực đại . Sau khi đỉnh thành , cực đại trên đường đó là ; cập nhật đỉnh thành làm truy vấn tiếp theo có kết quả , còn đường chỉ chứa giá trị .

Lời giải tóm tắt
  • Ý tưởng: Dựng Heavy-Light Decomposition lặp để gán mỗi đỉnh một vị trí. Segment tree lưu cực đại theo vị trí và hỗ trợ gán điểm. Với truy vấn đường, khi hai đầu còn ở hai chuỗi khác nhau, lấy cực đại trên đoạn từ đầu chuỗi sâu hơn đến đỉnh đang xét rồi nhảy lên cha của đầu chuỗi. Đoạn cuối nằm trong một chuỗi. Mỗi thao tác tốn O(log^2 n), bộ nhớ O(n).