Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [Giải thuật] Phần tử nhỏ thứ k trên đoạn

    Cho dãy số a1,…,ana_1, \dots, a_na1​,…,an​. Với mỗi truy vấn (l,r,k)(l, r, k)(l,r,k), hãy tìm phần tử nhỏ thứ kkk trong đoạn con al,al+1,…,ara_l, a_{l+1}, \dots, a_ral​,al+1​,…,ar​ (nếu sắp xếp đoạn con tăng dần thì đó là phần tử ở vị trí kkk).

    Sử dụng cây phân đoạn bền vững (persistent segment tree) để mỗi truy vấn chạy trong O(log⁡n)O(\log n)O(logn).

    Ví dụ: Dãy [3,1,2][3,1,2][3,1,2], truy vấn (1,3,2)(1,3,2)(1,3,2) trả về 222 vì đoạn con sắp xếp là [1,2,3][1,2,3][1,2,3], phần tử thứ 222 là 222.

    • Định dạng đầu vào:

      Dòng đầu chứa nnn và qqq. Dòng thứ hai chứa nnn số nguyên. qqq dòng tiếp theo, mỗi dòng ba số l r kl\ r\ kl r k.

    • Ràng buộc đầu vào:

      1≤n,q≤2⋅1051 \le n, q \le 2\cdot10^51≤n,q≤2⋅105, ∣ai∣≤109|a_i| \le 10^9∣ai​∣≤109, 1≤l≤r≤n1 \le l \le r \le n1≤l≤r≤n, 1≤k≤r−l+11 \le k \le r-l+11≤k≤r−l+1.

    • Định dạng đầu ra:

      Với mỗi truy vấn, in phần tử nhỏ thứ kkk trên một dòng.

    Ví dụ:

    Đầu vào:

    3 1
    3 1 2
    1 3 2
    

    Đầu ra:

    2

    Giải thích:

    Đoạn con là toàn dãy [3,1,2]. Sắp xếp tăng dần được [1,2,3]; phần tử nhỏ thứ 2 là 2.

    Đang tải editor...