#BST0000022. Bộ lặp cây tìm kiếm nhị phân (Binary Search Tree Iterator)

Bộ lặp cây tìm kiếm nhị phân (Binary Search Tree Iterator)

Bộ lặp cây tìm kiếm nhị phân (Binary Search Tree Iterator)

Nguồn: LeetCode

Phiên bản: Phước Hưng OJ Extended

Đề bài

Dựng BST từ nn khóa phân biệt a1,a2,…,ana_1,a_2,\ldots,a_n theo đúng thứ tự chèn. Xét dãy inorder của cây, tức các khóa theo thứ tự trái - gốc - phải.

Một bộ lặp (iterator) được đặt ban đầu ở vị trí trước phần tử đầu tiên của dãy inorder. Sau đó xử lý qq lệnh theo đúng thứ tự:

N tương ứng với next(): di chuyển bộ lặp tới phần tử kế tiếp trong dãy inorder và in khóa tại vị trí mới.

H tương ứng với hasNext(): kiểm tra có còn phần tử nào ở sau vị trí hiện tại hay không. Lệnh này không làm thay đổi vị trí bộ lặp.

Mọi lệnh N trong input được bảo đảm hợp lệ, nghĩa là khi lệnh đó xuất hiện luôn còn ít nhất một phần tử kế tiếp.

Input

Dòng đầu chứa số nguyên nn.

Dòng thứ hai chứa nn khóa phân biệt a1,a2,…,ana_1,a_2,\ldots,a_n theo thứ tự chèn.

Dòng thứ ba chứa số nguyên qq.

qq dòng tiếp theo, mỗi dòng chứa đúng một ký tự N hoặc H.

Output

Mỗi lệnh tạo đúng một dòng output.

Với N, in khóa được trả về bởi next().

Với H, in true nếu còn phần tử kế tiếp; ngược lại in false. Hai từ khóa này được viết bằng chữ thường đúng như trên.

Subtask

Subtask 1 (20 điểm): 1≤n,q≤201\le n,q\le 20.

Subtask 2 (30 điểm): 1≤n,q≤5001\le n,q\le 500.

Subtask 3 (50 điểm): 1≤n,q≤1051\le n,q\le 10^5.

Trong tất cả các subtask, 0≤ai≤1060\le a_i\le 10^6, các aia_i phân biệt và mọi lệnh N đều hợp lệ.

Ví dụ

Input

5
7 3 15 9 20
10
N
N
H
N
H
N
H
N
H
H

Output

3
7
true
9
true
15
true
20
false
false

Giải thích

Dãy inorder của cây là 3,7,9,15,203,7,9,15,20. Hai lệnh N đầu tiên lần lượt đưa bộ lặp tới 33 rồi 77.

Sau 77 vẫn còn phần tử nên lệnh H in true. Các lệnh N tiếp theo lần lượt trả 99, 1515 và 2020. Sau khi bộ lặp đã ở 2020, không còn phần tử phía sau, nên hai lệnh H cuối đều in false; việc gọi H không làm thay đổi vị trí.