canuc80k4000·1/30

Số hiệu hoán vị

Nộp bài trên LQDOJ

Bài 40 · Lexicographic DP

Xét mọi hoán vị của tập , sắp tăng theo thứ tự từ điển và đánh số từ . Cho một hoán vị và một thứ hạng hợp lệ ; hãy tìm thứ hạng của và hoán vị đứng ở vị trí .

Input

  • Dòng đầu chứa một hoán vị của các số từ đến ; số lượng phần tử trên dòng xác định .
  • Dòng thứ hai chứa số nguyên , là một thứ hạng hợp lệ.

Output

  • Dòng đầu in thứ hạng -based của hoán vị đã cho.
  • Dòng thứ hai in hoán vị đứng ở vị trí .

Constraints

  • .
  • Dòng đầu là một hoán vị của .
  • .

Scoring

  • Subtask ( số điểm): .
  • Subtask ( số điểm): Không có giới hạn bổ sung.

Example

Test 1

Input

3 1 2
6

Output

5
3 2 1

Giải thích: Có đúng bốn hoán vị đứng trước , nên thứ hạng của nó là . Hoán vị cuối cùng trong sáu hoán vị của là .

Lời giải tóm tắt
  • Phân tích: Tính fact[r] = r!.
  • Phân tích: Tính rank. Duy trì danh sách các số chưa dùng theo thứ tự tăng. Ở vị trí i, giả sử a[i] có chỉ số idx trong danh sách này. Có idx lựa chọn nhỏ hơn; với mỗi lựa chọn, phần đuôi gồm n-i-1 số có thể hoán vị theo fact[n-i-1] cách. Vì rank đánh từ 1, khởi tạo rank=1, cộng idx*fact[n-i-1], rồi xóa a[i].
  • Phân tích: Unrank. Đổi p về 0-based bằng p--. Nếu còn r vị trí phía sau thì mỗi lựa chọn hiện tại chiếm block fact[r]. Chỉ số lựa chọn bằng p/fact[r]; sau khi chọn, thay p bằng p%fact[r] để lấy vị trí nội bộ trong block.
  • Phân tích: Với n≤12, dùng unsigned long long và vector là đủ; chưa cần Fenwick hay order-statistics tree.
  • Tính đúng đắn: Với rank, mọi hoán vị đứng trước a có một vị trí đầu tiên khác a. Tại vị trí đó nó dùng một phần tử chưa dùng nhỏ hơn a[i]; phần đuôi là một hoán vị tùy ý. Các nhóm theo vị trí khác đầu tiên và theo giá trị nhỏ hơn là rời nhau, nên tổng các block đúng bằng số hoán vị đứng trước a.
  • Tính đúng đắn: Với unrank, danh sách hiện tại được chia thành các block bằng nhau theo phần tử tiếp theo. Phép chia chọn đúng block chứa p, phép lấy dư chuyển p thành vị trí trong block. Quy nạp theo số vị trí còn lại cho thấy thuật toán trả đúng duy nhất hoán vị thứ p.
  • Độ phức tạp: O(n²) thời gian, O(n) bộ nhớ.