Editorial for Truy vấn


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: Ta đơn giản duyệt qua từng giá trị p trong đoạn [l,r] và tìm kết quả.

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

Subtask 2: Gọi right_i (1 \le i \le N) là chỉ số j nhỏ nhất thỏa mãn j > iA_j \neq A_i. Xây dựng right_i trong O(N^2). Với mỗi truy vấn trên đoạn [l,r], ta chỉ cần kiểm tra hai giá trị A_lA_{right_l}:

  • Nếu A_l \neq x thì chỉ số l là kết quả cần tìm.
  • Ngược lại, nếu right_l \le rA_{right_l} \neq x thì right_l là kết quả cần tìm.
  • Nếu cả hai chỉ số lright_l không thỏa mãn thì không có đáp án cho truy vấn.

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

Subtask 3: Ta có thể xây dựng right_i (1 \le i \le N) với độ phức tạp O(N) như sau:

  • Gọi start là chỉ số i nhỏ nhất cần tính right_i. Ban đầu start=1.
  • Duyệt qua các chỉ số i từ 2 đến N.
  • Với mỗi chỉ số i, kiểm tra A_i \neq A_{i-1}. Nếu thỏa mãn, gán các giá trị right_j=i với start \le j \le i-1 và cập nhật start=i.

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


Comments