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


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.

Author: Yunan

Subtask 1: Với dãy hoán vị P, ta tiến hành xây dựng các cạnh của đồ thị và đếm số thành phần liên thông.

Độ phức tạp: O(Q.N^2)

Subtask 2: Ta xây dựng dãy hoán vị Q là đảo ngược của dãy P, cụ thể Q_i=P_{N-i+1} (1 \le i \le N). Khi đó, giữa hai đỉnh uv có cạnh nối khi và chỉ khi u<vQ_u>Q_v.

Từ đó ta có nhận xét rằng với các chỉ số j thỏa mãn tất cả các số từ 1 đến j đều xuất hiện ở dãy tiền tố tại j sẽ tạo thành một thành phần liên thông. Hay nói cách khác, ta cần đếm các vị trí j thỏa mãn:

 \displaystyle \sum_{i=1}^{j} (Q_i-i) = 0

Độ phức tạp: O(Q.N)

Subtask 3: Ta có thể giải quyết bài toán bằng cách xây dựng mảng Tổng tiền tố (Prefix Sum) kết hợp cấu trúc Segment Tree để cập nhật và đếm số lượng chỉ số j.

Độ phức tạp: O((N+Q).\log(N))


Comments