canuc80k2332·33/50

Dãy Bình Tràn

Nộp bài trên LQDOJ

Bài 23 · Disjoint Set Union

Có bình xếp theo thứ tự từ trên xuống dưới, đánh số đến . Bình có dung tích và ban đầu rỗng.

Khi đổ nước vào bình , bình đó nhận nước cho tới khi đầy. Phần nước vượt dung tích chảy toàn bộ sang bình , rồi tiếp tục theo cùng quy tắc. Phần nước còn thừa sau bình bị mất.

Bạn cần xử lý các thao tác đổ nước và truy vấn lượng nước hiện có trong một bình.

Input

  • Dòng đầu chứa .
  • Dòng tiếp theo chứa dung tích .
  • Dòng tiếp theo chứa .
  • Mỗi truy vấn có dạng để đổ đơn vị nước vào bình , hoặc để hỏi bình .

Output

  • Với mỗi truy vấn loại , in lượng nước hiện có trong bình được hỏi.

Constraints

  • .
  • .
  • Ở truy vấn loại : và .
  • Ở truy vấn loại : .
  • Nước vượt khỏi bình bị mất; nước không bao giờ chảy ngược lên trên.

Scoring

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

Example

Test 1

Input

4
3 5 2 4
9
1 2 4
1 1 5
2 1
2 2
1 2 5
2 3
2 4
1 4 5
2 4

Output

3
5
2
4
4

Giải thích: Sau hai lần đổ đầu, hai bình đầu chứa và . Lần đổ tiếp theo bỏ qua bình đã đầy, lấp phần còn lại của bình rồi làm đầy bình ; lần cuối không thể tăng thêm bình và phần dư bị mất.

Lời giải tóm tắt
  • Phân tích: Một bình đã đầy sẽ không bao giờ nhận thêm nước. DSU kế nhiệm lưu vị trí chưa đầy đầu tiên tại hoặc sau một chỉ số. Khi bình i đầy, ta “xóa” nó khỏi tập ứng viên bằng cách nối i tới kế nhiệm của i+1.
  • Thuật toán: Thêm lính canh n+1. Với thao tác đổ (p,x), lấy i=find(p). Lấp phần trống của i; nếu bình đầy, gán cha của i thành find(i+1) rồi tiếp tục với phần nước còn lại. Nếu bình chưa đầy hoặc đã qua n, dừng. Truy vấn loại 2 in trực tiếp lượng nước đã lưu.
  • Chứng minh: Bất biến: find(p) là bình chưa đầy đầu tiên có chỉ số không nhỏ hơn p, hoặc lính canh nếu không có. Khi một bình vừa đầy, nối nó sang kế nhiệm loại bỏ đúng bình đó và giữ bất biến. Quy tắc tràn luôn lấp bình chưa đầy đầu tiên rồi mới đi xuống, đúng chính xác thứ tự mà vòng lặp xử lý. Vì thế trạng thái sau mọi thao tác trùng mô phỏng trực tiếp.
  • Độ phức tạp: Mỗi bình bị xóa nhiều nhất một lần; tổng thời gian O((n+m) α(n)), bộ nhớ O(n).