Skip to content

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

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

Problem code: olpicpc024c06d Group: Uncategorized Points: 0 pointspartial
Limits
1.0 s, 256 MB
AC rate
2.8%
Solvers
1
Read the editorial only when you are stuck, and do not copy code from it. Please respect the problem author and the editorialist: submitting an official solution before solving the problem yourself is a bannable offence.

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 u và v có cạnh nối khi và chỉ khi u<v và Q_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