Giải: E - Codeforces Round #710 (Div. 3)
Đề bài: https://codeforces.com/problemset/problem/1506/E Tìm hoán vị nhỏ nhất: Ta xây dựng từng vị trí từ 1 đến n - Dễ dàng chứng...
Tìm hoán vị nhỏ nhất:
Ta xây dựng từng vị trí từ 1 đến n
- Dễ dàng chứng minh: nếu p[i] > p[i - 1] thì số ở vị trí i bắt buộc phải là p[i].
- Ngược lại, ta sẽ phải tìm số nhỏ nhất chưa từng xuất hiện trong quá trình xây dựng. Ta chỉ cần một biến và cập nhật trong quá trình chạy vòng lặp.
Tìm hoán vị lớn nhất:
Ta cũng xây dựng từng vị trí từ 1 đến n
- Tương tự cách tìm hoán vị nhỏ nhất, nếu p[i] > p[i - 1] thì số ở vị trí i bắt buộc phải là p[i].
- Ngược lại ta sẽ phải tìm số lớn nhất, nhỏ hơn p[i], và chưa từng xuất hiện trong quá tình xây dựng. Để thực hiện điều này, ta có thể dùng một stack, cụ thể như sau, nếu p[i] > p[i - 1] ta sẽ đẩy tất cả các x với p[i - 1] < x < p[i] vào trong stack, ngược lại thì lấy số đầu tiên trong stack ra gán cho vị trí i.
Đpt: O(n).
Code tham khảo: https://codeforces.com/contest/1506/submission/111490839

Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất