Thành phần liên thông

View as PDF

Time limit: 1.0s , Memory limit: 256M , Points: 0 (partial)

Bạn được cho một dãy hoán vị P độ dài N và một đồ thị G gồm N đỉnh. Giữa hai đỉnh uv của đồ thị có cạnh nối hai chiều khi và chỉ khi u<vPu<Pv.

Bạn cần xử lý Q truy vấn, mỗi truy vấn bạn được cho cặp số nguyên (i,j) (1i,jN, ij), yêu cầu thực hiện các bước sau theo thứ tự:

  1. Hoán đổi giá trị của PiPj.
  2. Cập nhật lại danh sách cạnh của đồ thị dựa trên dãy hoán vị P đã thay đổi (thêm hoặc xóa cạnh).
  3. Đếm số thành phần liên thông của đồ thị.

Lưu ý rằng dãy hoán vị P đã thay đổi sẽ được dùng cho truy vấn tiếp theo.

Input

  • Dòng đầu tiên chứa số nguyên N (2N105).
  • Dòng thứ hai chứa N số nguyên của dãy hoán vị P (1PiN).
  • Dòng tiếp theo chứa số nguyên Q (1Q105).
  • Q dòng tiếp theo, mỗi dòng chứa hai số nguyên ij mô tả truy vấn.
  • Dữ liệu đảm bảo dãy P là một dãy hoán vị hợp lệ.

Output

  • Với mỗi truy vấn, in ra số thành phần liên thông trên một dòng.

Examples

Sample Input
Copy
3
3 1 2
2
2 3
1 2
Sample Output
Copy
3
2

Scoring

  • Subtask 1 với 30% số điểm: N,Q200
  • Subtask 2 với 30% số điểm: N,Q5000
  • Subtask 3 với 40% số điểm: Không có ràng buộc gì thêm

Notes

Trong ví dụ, đồ thị ban đầu có một cạnh nối giữa hai đỉnh 23.

Ở truy vấn thứ nhất, dãy hoán vị P={3,2,1} và đồ thị không có cạnh nối. Có tổng cộng 3 thành phần liên thông.

Ở truy vấn thứ hai, dãy hoán vị P={2,3,1} và đồ thị có một cạnh nối giữa hai đỉnh 12. Có tổng cộng 2 thành phần liên thông.


Comments