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 < vP_u < P_v.

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) (1 \le i,j \le N, i \neq j), yêu cầu thực hiện các bước sau theo thứ tự:

  1. Hoán đổi giá trị của P_iP_j.
  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 (2 \le N \le 10^5).
  • Dòng thứ hai chứa N số nguyên của dãy hoán vị P (1 \le P_i \le N).
  • Dòng tiếp theo chứa số nguyên Q (1 \le Q \le 10^5).
  • 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
3
3 1 2
2
2 3
1 2
Sample Output
3
2

Scoring

  • Subtask 1 với 30\% số điểm: N,Q \le 200
  • Subtask 2 với 30\% số điểm: N,Q \le 5000
  • 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 2-3.

Ở 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 1-2. Có tổng cộng 2 thành phần liên thông.


Comments