#BST0000016. Nhiều truy vấn successor và predecessor (Multiple Predecessor and Successor Queries)
Nhiều truy vấn successor và predecessor (Multiple Predecessor and Successor Queries)
Nhiều truy vấn successor và predecessor (Multiple Predecessor and Successor Queries)
Nguồn: Phước Hưng OJ
Phiên bản: Phước Hưng OJ Extended
Đề bài
Dựng BST từ dãy theo đúng thứ tự chèn. Nếu một khóa xuất hiện nhiều lần, chỉ lần xuất hiện đầu tiên tạo nút; các lần sau bị bỏ qua.
Với mỗi giá trị truy vấn , không yêu cầu phải tồn tại trong cây. Cần xác định hai khóa lân cận nghiêm ngặt theo giá trị:
- predecessor của là khóa lớn nhất trong cây thỏa ;
- successor của là khóa nhỏ nhất trong cây thỏa .
Nếu một phía không có khóa thỏa điều kiện, kết quả phía đó là NONE.
Input
Dòng đầu chứa số nguyên .
Nếu , dòng tiếp theo chứa khóa . Nếu , dòng này không xuất hiện.
Dòng tiếp theo chứa số nguyên — số truy vấn.
dòng tiếp theo, mỗi dòng chứa một số nguyên .
Output
Với mỗi truy vấn, in một dòng gồm hai trường theo đúng thứ tự predecessor successor.
Nếu predecessor không tồn tại, trường thứ nhất là NONE. Nếu successor không tồn tại, trường thứ hai là NONE.
Subtask
Subtask 1 (20 điểm): , .
Subtask 2 (30 điểm): , .
Subtask 3 (50 điểm): , .
Trong tất cả các subtask, mọi khóa và mọi giá trị truy vấn là số nguyên có dấu 64-bit.
Ví dụ
Input
7
8 3 10 1 6 14 4
3
6
1
9
Output
4 8
NONE 3
8 10
Giải thích
Với , khóa lớn nhất nhỏ hơn là và khóa nhỏ nhất lớn hơn là .
Với , không có khóa nào nhỏ hơn , còn successor là , nên kết quả là NONE 3.
Với , predecessor là và successor là .